Heim >Datenbank >MySQL-Tutorial >Warum wirft MySQL beim Mischen von Join-Stilen „Unbekannte Spalte in ON-Klausel' aus?
MySQL-Fehler „Unbekannte Spalte in ON-Klausel“: Detaillierte Erläuterung der Verwirrung in der Verbindungsreihenfolge
Wenn in MySQL der Fehler „#1054 – Unbekannte Spalte ‚p.id‘ in ‚on-Klausel‘“ auftritt, ist es wichtig, die potenziellen Probleme zu verstehen, die sich aus der Vermischung von ANSI-89- und ANSI-92-Style-Joins in der Abfrage ergeben. Standardmäßig bewertet MySQL Verbindungen anhand ihrer Priorität, was zu Verwirrung führen kann, wenn die Verbindungsreihenfolge nicht explizit angegeben wird.
Bei einer falschen Abfrage interpretiert MySQL die Abfrage wie folgt, wobei Verknüpfungen im Komma-Stil nach dem JOIN-Schlüsselwort Join ausgewertet werden:
<code class="language-sql">FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... )</code>
Zu diesem Zeitpunkt geht MySQL davon aus, dass die Tabelle „p“ nicht deklariert wurde, was zu einem Fehler „Unbekannte Spalte“ führt.
Um diese Verwirrung zu vermeiden, wird empfohlen, in der gesamten Abfrage immer Verknüpfungen im ANSI-92-Stil zu verwenden, d. h. das JOIN-Schlüsselwort zu verwenden:
<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>
Mit diesem Ansatz ist die Verbindungsreihenfolge klar und verwirrende Fehlermeldungen werden vermieden.
Das obige ist der detaillierte Inhalt vonWarum wirft MySQL beim Mischen von Join-Stilen „Unbekannte Spalte in ON-Klausel' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!