Fehler „Unbekannte Spalte“ in der MySQL-Abfrage
In MySQL kann beim Ausführen von Abfragen mit Verknüpfungen der Fehler „Unbekannte Spalte ‚p.id‘ in ON-Klausel“ auftreten. Um die Ursache dieses Fehlers zu verstehen, schauen wir uns die Abfrage und ihre Datenbankinterpretation genauer an.
Erklärung der Abfrage:
Die betreffende Abfrage sieht folgendermaßen aus:
<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>
Dieser Fehler ist darauf zurückzuführen, dass Joins im ANSI-89- und ANSI-92-Stil gemischt werden, was zu Mehrdeutigkeiten führen kann. In der ANSI-89-Syntax werden Verknüpfungen durch Kommas dargestellt, während in ANSI-92 das Schlüsselwort JOIN verwendet wird.
Fehlerbeschreibung:
Die Datenbank interpretiert die Abfrage wie folgt:
<code class="language-sql">FROM property p, ( propertygeometry pg JOIN shortlist sl ON sl.PropertyID = p.id AND sl.MemberID = 384216 ... )</code>
In dieser Interpretation wird Tabelle p nicht vor dem durch Kommas getrennten Join mit der Eigenschaftsgeometrie pg deklariert. Daher kann die Datenbank die Spalte p.id nicht finden, wenn sie die ON-Bedingung in nachfolgenden Verknüpfungen auswertet.
Lösung:
Um diesen Fehler zu umgehen, wird empfohlen, stets Verknüpfungen im ANSI-92-Stil zu verwenden, wobei alle Verknüpfungen durch das JOIN-Schlüsselwort explizit gemacht werden:
<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>
Durch die Einführung einer konsistenten Join-Syntax können Sie Mehrdeutigkeiten vermeiden und ähnliche Fehler in zukünftigen Abfragen verhindern.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meiner MySQL-Abfrage die Fehlermeldung „Unbekannte Spalte ‚p.id' in ‚on-Klausel''?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!