sql >> Database teknologi >  >> RDS >> Mysql

MySQL ukendt kolonne i ON-klausul

Bland ikke sammenføjninger i ANSI-89-stil og ANSI-92-stil. De har forskellig forrang, hvilket kan føre til forvirrende fejl, og det er det, der er sket her. Din forespørgsel bliver fortolket som følger:

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

I ovenstående evalueres de joinforbindelser, der bruger JOIN-nøgleordet, først, før sammenføjningen i kommastil overhovedet tages i betragtning. På det tidspunkt tabellen p er endnu ikke erklæret.

Fra MySQL manual :

Dog er forrangen af ​​kommaoperatoren mindre end for INNER JOIN, CROSS JOIN, LEFT JOIN og så videre. Hvis du blander komma-sammenføjninger med de andre jointyper, når der er en join-betingelse, er der en fejl af formen Ukendt kolonne 'col_name' i 'on-klausul' kan ske. Oplysninger om håndtering af dette problem gives senere i dette afsnit.

Jeg vil anbefale altid ved at bruge ANSI-92 style joins, dvs. bruge JOIN nøgleordet:

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

Relateret:



  1. Sådan overvåger du PostgreSQL, der kører inde i en Docker-container:Del 1

  2. Skylning af enkelt markør

  3. Webinar:Nye funktioner i Postgres 12 [Opfølgning]

  4. Databaseskema, autoincrement