複数のテーブルを結合するクエリを操作するときに、このエラーが発生することは珍しくありません。あいまいな列名のエラー。この問題は、結合されたテーブル全体に同じ列名が存在する場合に発生し、SQL Server Management Studio (SSMS) が正しいテーブル参照を割り当てるのに苦労します。
例として次のクエリを考えてみましょう:
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
このクエリでは、「Vendors」、「Invoices」、「InvoiceLineItems」の 3 つのテーブルからデータを取得しようとします。ただし、実行すると、「InvoiceID」フィールドの恐ろしいあいまいな列名エラーが発生します。
解決の鍵この問題は、あいまいな列を参照するときにテーブル名を明示的に指定することにあります。テーブル名をプレフィックスとして列名に追加することで、どのテーブルの列を参照しているのかが明確になります。
この例では、「InvoiceID」列が「Invoices」と「InvoiceLineItems」の両方に存在するため、テーブルを使用するには、次のようにクエリで目的のテーブルを指定する必要があります:
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
「請求書」を追加します。 "InvoiceID" の前に、"Invoices" テーブルの "InvoiceID" 列から値を取得することを明示的に指定します。これにより、あいまいさがなくなり、SSMS がクエリを正しく実行できるようになります。
SQL で曖昧な列名エラーが発生した場合は、常にテーブル名を明示的に指定することを忘れないでください。そのコラムを参照します。これにより、SQL Server に明確な指示が提供され、正確なクエリ結果が保証されます。
以上がSQL 結合におけるあいまいな列名エラーを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。