SQL Ambiguous Column Name Ralat: Penjelasan Terperinci
Apabila bekerja dengan pertanyaan SQL yang melibatkan penggabungan jadual, anda mungkin menghadapi ralat jika anda mempunyai berbilang lajur dengan nama yang sama dalam jadual yang digabungkan. Ralat ini berlaku kerana pangkalan data tidak dapat menentukan jadual mana rujukan lajur milik. Dalam artikel ini, kami akan menyelidiki isu ini dan menyediakan penyelesaian.
Pertimbangkan pertanyaan berikut:
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
Dalam pertanyaan ini, ralat berlaku disebabkan kehadiran "ID Invois " lajur dalam kedua-dua jadual "Invois" dan "InvoiceLineItems". Pangkalan data tidak dapat membezakan dari jadual mana anda ingin mendapatkan nilai "ID Invois".
Untuk menyelesaikan kekaburan ini, anda mesti menyatakan nama jadual apabila merujuk lajur. Anda boleh mencapai ini menggunakan sama ada notasi titik atau alias. Notasi titik melibatkan awalan nama lajur dengan nama jadual, seperti berikut:
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
Sebagai alternatif, anda boleh menggunakan alias seperti berikut:
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
Dengan menyatakan nama jadual atau menggunakan alias , anda secara eksplisit menunjukkan lajur yang anda rujuk, dengan itu menyelesaikan kekaburan dan membenarkan pertanyaan untuk dilaksanakan dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Nama Lajur Samar-samar SQL dalam Joins?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!