Rumah >pangkalan data >tutorial mysql >Mengapa MySQL Melemparkan Ralat 'Lajur Tidak Diketahui dalam Klausa ON' Apabila Mencampurkan Sintaks Sertai?

Mengapa MySQL Melemparkan Ralat 'Lajur Tidak Diketahui dalam Klausa ON' Apabila Mencampurkan Sintaks Sertai?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-13 06:48:42918semak imbas

Why Does MySQL Throw an

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!

Kenyataan:
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