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

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

Mary-Kate Olsen
Lepaskan: 2025-01-03 03:15:38
asal
811 orang telah melayarinya

How to Resolve Ambiguous Column Name Errors in SQL Joins?

Ralat Nama Lajur Samar-samar dalam SQL: Membongkar Enigma

Apabila bekerja dengan pertanyaan yang menyertai berbilang jadual, ia tidak jarang ditemui ralat nama lajur yang tidak jelas. Ini berlaku apabila nama lajur yang sama wujud merentas jadual yang digabungkan, menyebabkan SQL Server Management Studio (SSMS) bergelut dengan memberikan rujukan jadual yang betul.

Pertimbangkan pertanyaan berikut sebagai contoh:

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, kami cuba mendapatkan semula data daripada tiga jadual: "Vendor," "Invois" dan "InvoiceLineItems." Walau bagaimanapun, selepas pelaksanaan, kami menghadapi ralat nama lajur samar-samar yang digeruni untuk medan "ID Invois".

Penyelesaian: Rujukan Jadual Eksplisit

Kunci untuk menyelesaikan isu ini terletak pada menyatakan secara eksplisit nama jadual apabila merujuk lajur yang tidak jelas. Dengan menambahkan nama jadual sebagai awalan pada nama lajur, kami menjelaskan lajur jadual mana yang kami rujuk.

Dalam contoh kami, memandangkan lajur "ID Invois" wujud dalam kedua-dua "Invois" dan "InvoiceLineItems" jadual, kita perlu menentukan jadual yang dikehendaki dalam pertanyaan 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

Dengan menambah "Invois." sebelum "ID Invois", kami secara eksplisit menyatakan bahawa kami ingin mendapatkan semula nilai daripada lajur "Invois" pada jadual "Invois", dengan itu menghapuskan kekaburan dan membenarkan SSMS melaksanakan pertanyaan dengan betul.

Apabila menghadapi ralat nama lajur yang tidak jelas dalam SQL, sentiasa ingat untuk menyatakan secara eksplisit nama jadual apabila merujuk lajur itu. Dengan berbuat demikian, anda memberikan arahan yang jelas kepada SQL Server dan memastikan hasil pertanyaan yang tepat.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat Nama Lajur Samar-samar dalam SQL 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan