Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menyelesaikan Ralat Nama Lajur Samar-samar SQL dalam Joins?

Bagaimana untuk Menyelesaikan Ralat Nama Lajur Samar-samar SQL dalam Joins?

DDD
Lepaskan: 2025-01-01 11:12:11
asal
433 orang telah melayarinya

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

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
Salin selepas log masuk

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
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan