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
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".
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
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!