Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kolom MySQL tidak dikenal dalam klausa ON

Jangan mencampur gaya ANSI-89 dan gaya ANSI-92 bergabung. Mereka memiliki prioritas berbeda yang dapat menyebabkan kesalahan yang membingungkan, dan itulah yang terjadi di sini. Permintaan Anda ditafsirkan sebagai berikut:

FROM property p, (
    propertygeometry pg
    JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216
    ...
)

Di atas, gabungan menggunakan kata kunci JOIN dievaluasi terlebih dahulu sebelum gabungan gaya koma dipertimbangkan. Pada saat itu tabel p belum diumumkan.

Dari MySQL panduan :

Namun, operator koma lebih diutamakan daripada INNER JOIN, CROSS JOIN, LEFT JOIN, dan seterusnya. Jika Anda menggabungkan gabungan koma dengan jenis gabungan lainnya ketika ada kondisi bergabung, kesalahan bentuk Kolom tidak diketahui 'col_name' di 'on clause' mungkin terjadi. Informasi tentang menangani masalah ini diberikan kemudian di bagian ini.

Saya akan merekomendasikan selalu menggunakan gabungan gaya ANSI-92, yaitu menggunakan kata kunci GABUNG:

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

Terkait:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. INTERSECT di MySQL

  2. Perbarui Kueri Untuk Memperbarui Baris di MySQL

  3. Praktik terbaik:Impor file mySQL di PHP; membagi kueri

  4. MySQL GROUP BY perilaku

  5. Kesalahan fatal:Panggilan ke fungsi yang tidak ditentukan session_register()