ホームページ > データベース > mysql チュートリアル > 結合における SQL のあいまいな列名エラーを解決するにはどうすればよいですか?

結合における SQL のあいまいな列名エラーを解決するにはどうすればよいですか?

DDD
リリース: 2025-01-01 11:12:11
オリジナル
461 人が閲覧しました

How to Resolve SQL's Ambiguous Column Name Error in Joins?

SQL のあいまいな列名エラー: 詳細な説明

テーブルの結合を伴う SQL クエリを使用する場合、次のような場合にエラーが発生することがあります。結合されたテーブルに同じ名前の列が複数ある。このエラーは、データベースが列参照がどのテーブルに属しているかを判断できないために発生します。この記事では、この問題について詳しく説明し、解決策を提供します。

次のクエリを考えてみましょう:

SELECT 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, InvoiceID, InvoiceSequence, InvoiceLineItemAmount
ログイン後にコピー

このクエリでは、「InvoiceID」が存在するためにエラーが発生します。 「Invoices」テーブルと「InvoiceLineItems」テーブルの両方の「」列。データベースは、どのテーブルから「InvoiceID」値を取得しようとしているのかを識別できません。

この曖昧さを解決するには、列を参照するときにテーブル名を指定する必要があります。これは、ドット表記またはエイリアスを使用して実現できます。ドット表記では、次のように列名の前にテーブル名を付ける必要があります:

SELECT 
    VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
FROM Vendors 
JOIN Invoices ON (Vendors.VendorID = Invoices.VendorID)
JOIN InvoiceLineItems ON (Invoices.InvoiceID = InvoiceLineItems.InvoiceID)
WHERE  
    Invoices.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    VendorName, Invoices.InvoiceID, InvoiceSequence, InvoiceLineItemAmount
ログイン後にコピー

または、次のようにエイリアスを使用できます:

SELECT 
    v.VendorName, i.InvoiceID, il.InvoiceSequence, il.InvoiceLineItemAmount
FROM Vendors AS v  JOIN Invoices AS i ON (v.VendorID = i.VendorID)
JOIN InvoiceLineItems AS il ON (i.InvoiceID = il.InvoiceID)
WHERE  
    i.InvoiceID IN
        (SELECT InvoiceSequence 
         FROM InvoiceLineItems
         WHERE InvoiceSequence > 1)
ORDER BY 
    v.VendorName, i.InvoiceID, il.InvoiceSequence, il.InvoiceLineItemAmount
ログイン後にコピー

テーブル名を指定するか、エイリアスを使用します。を使用すると、どの列を参照しているかを明示的に指定できるため、あいまいさが解決され、クエリが正しく実行できるようになります。

以上が結合における SQL のあいまいな列名エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート