Rumah > pangkalan data > tutorial mysql > Mengapa saya mendapat ralat 'Lajur tidak diketahui 'p.id' dalam 'pada klausa'' dalam pertanyaan MySQL saya?

Mengapa saya mendapat ralat 'Lajur tidak diketahui 'p.id' dalam 'pada klausa'' dalam pertanyaan MySQL saya?

Mary-Kate Olsen
Lepaskan: 2025-01-13 09:58:43
asal
134 orang telah melayarinya

Why am I getting an

Ralat "lajur tidak diketahui" dalam pertanyaan MySQL

Dalam MySQL, anda mungkin menghadapi ralat "Lajur tidak diketahui 'p.id' dalam klausa ON" semasa melaksanakan pertanyaan yang melibatkan gabungan. Untuk memahami punca ralat ini, mari kita mendalami pertanyaan dan tafsiran pangkalan datanya.

Penjelasan pertanyaan:

Pertanyaan yang dipersoalkan kelihatan seperti ini:

<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, propertygeometry pg
    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
    AND p.PropertyGeometryID = pg.id
GROUP BY p.id</code>
Salin selepas log masuk

Ralat ini disebabkan oleh pencampuran gaya ANSI-89 dan ANSI-92, yang boleh membawa kepada kekaburan. Dalam sintaks ANSI-89, cantuman diwakili dengan koma, manakala dalam ANSI-92, kata kunci JOIN digunakan.

Perihalan ralat:

Pangkalan data mentafsir pertanyaan seperti berikut:

<code class="language-sql">FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)</code>
Salin selepas log masuk

Dalam tafsiran ini, jadual p tidak diisytiharkan sebelum cantuman dipisahkan koma dengan propertygeometry ms. Oleh itu, pangkalan data tidak dapat mencari lajur p.id semasa menilai keadaan ON dalam cantuman seterusnya.

Penyelesaian:

Untuk mengatasi ralat ini, adalah disyorkan untuk sentiasa menggunakan gabungan gaya ANSI-92, di mana semua gabungan dibuat secara eksplisit oleh 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>
Salin selepas log masuk

Dengan menggunakan sintaks gabungan yang konsisten, anda boleh mengelakkan kekaburan dan menghalang ralat yang serupa dalam pertanyaan akan datang.

Atas ialah kandungan terperinci Mengapa saya mendapat ralat 'Lajur tidak diketahui 'p.id' dalam 'pada klausa'' dalam pertanyaan MySQL saya?. 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