Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Melemparkan 'Lajur Tidak Diketahui dalam Klausa ON' Apabila Mencampurkan Gaya Sertai?
Ralat "Lajur Tidak Diketahui dalam Klausa ON" MySQL: penjelasan terperinci tentang kekeliruan susunan sambungan
Apabila menghadapi ralat "#1054 - lajur tidak diketahui 'p.id' dalam 'pada klausa'" dalam MySQL, kuncinya adalah untuk memahami potensi masalah mencampurkan gaya ANSI-89 dan ANSI-92 dalam pertanyaan. Secara lalai, MySQL menilai sambungan berdasarkan keutamaan mereka, yang boleh menyebabkan kekeliruan jika susunan sambungan tidak dinyatakan dengan jelas.
Dalam pertanyaan yang salah, MySQL akan mentafsir pertanyaan seperti berikut, di mana gabungan gaya koma dinilai selepas gabungan kata kunci JOIN:
<code class="language-sql">FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... )</code>
Pada ketika ini, MySQL percaya bahawa jadual "p" belum diisytiharkan, menyebabkan ralat "lajur tidak diketahui".
Untuk mengelakkan kekeliruan ini, adalah disyorkan untuk sentiasa menggunakan gabungan gaya ANSI-92 sepanjang pertanyaan, iaitu menggunakan kata kunci JOIN:
<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>
Dengan pendekatan ini, urutan sambungan adalah jelas, sekali gus mengelakkan mesej ralat yang mengelirukan.
Atas ialah kandungan terperinci Mengapa MySQL Melemparkan 'Lajur Tidak Diketahui dalam Klausa ON' Apabila Mencampurkan Gaya Sertai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!