Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nieznana kolumna MySQL w klauzuli ON

Nie mieszaj złączeń w stylu ANSI-89 i ANSI-92. Mają inny priorytet, co może prowadzić do mylących błędów i tak właśnie się tutaj stało. Twoje zapytanie jest interpretowane w następujący sposób:

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

W powyższym przykładzie sprzężenia za pomocą słowa kluczowego JOIN są oceniane jako pierwsze, zanim zostanie nawet rozważone sprzężenie w stylu przecinka. W tym momencie tabela p nie zostało jeszcze ogłoszone.

Z MySQL instrukcja :

Jednak pierwszeństwo operatora przecinka jest mniejsze niż INNER JOIN, CROSS JOIN, LEFT JOIN i tak dalej. Jeśli połączysz łączenie przecinkowe z innymi typami złączenia, gdy istnieje warunek złączenia, błąd postaci Nieznana kolumna „nazwa_kolumny” w klauzuli „on” może wystąpić. Informacje na temat radzenia sobie z tym problemem są podane w dalszej części tej sekcji.

Polecam zawsze za pomocą złączeń w stylu ANSI-92, czyli za pomocą słowa kluczowego JOIN:

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

Powiązane:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Amazon EC2, mysql przerywa start, ponieważ InnoDB:mmap (x bajtów) nie powiodło się; errno 12

  2. Połącz się z mysql w kontenerze docker z hosta

  3. Sprawdzasz tabelę pod kątem nakładania się czasu?

  4. Dlaczego otrzymuję Nie można przekazać parametru 2 przez błąd odniesienia, gdy używam bindParam ze stałą wartością?

  5. Jak używać natywnego hasła w MySQL 5.7