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 サイトの他の関連記事を参照してください。