Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Melemparkan Ralat 'Lajur Tidak Diketahui dalam Klausa ON' Apabila Mencampurkan Sintaks Sertai?
Ralat "Lajur Tidak Diketahui" MySQL: Memahami Konflik Sintaks Sertai
Ralat "Lajur tidak diketahui 'p.id' dalam 'pada klausa'" MySQL sering timbul daripada penggunaan sintaks gabungan yang tidak konsisten. Kekaburan ini berpunca daripada perbezaan antara gaya cantuman ANSI-89 dan ANSI-92.
ANSI-89 menggunakan koma untuk mentakrifkan cantuman, manakala ANSI-92 menggunakan kata kunci JOIN
eksplisit. Mencampurkan gaya ini membawa kepada ralat penghuraian. Pertanyaan asal tidak menggabungkan kedua-duanya dengan betul, menyebabkan MySQL mentafsir gabungan ANSI-92 terlebih dahulu. Akibatnya, jadual "p" tidak dikenali apabila dirujuk dalam bahagian ANSI-89 syarat cantum.
Penyelesaian adalah untuk mengekalkan konsistensi. Menggunakan sintaks ANSI-92 sepanjang menghapuskan isu keutamaan dan meningkatkan kebolehbacaan pertanyaan.
Berikut ialah pertanyaan yang diperbetulkan menggunakan sintaks ANSI-92 yang konsisten:
<code class="language-sql">SELECT p.*, IF(COUNT(ms.PropertyID) > 0,1,0) AS Contacted, pm.MediaID, DATE_FORMAT(p.AvailableFrom, '%d %b %Y') AS AvailableFrom, AsText(pg.Geometry) AS Geometry FROM property p JOIN propertygeometry pg ON p.PropertyGeometryID = pg.id JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 LEFT JOIN message ms ON ms.PropertyID = p.id AND ms.SenderID = 384216 LEFT JOIN property_media pm ON pm.PropertyID = p.id AND pm.IsPrimary = 1 WHERE p.paused = 0 GROUP BY p.id</code>
Pendekatan ini memastikan pelaksanaan pertanyaan yang lancar dengan mengelakkan konflik sintaks. Sentiasa gunakan kata kunci JOIN
eksplisit untuk kejelasan dan pencegahan ralat.
Atas ialah kandungan terperinci Mengapa MySQL Melemparkan Ralat 'Lajur Tidak Diketahui dalam Klausa ON' Apabila Mencampurkan Sintaks Sertai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!