Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in meiner MySQL-Abfrage die Fehlermeldung „Unbekannte Spalte ‚p.id' in ‚on-Klausel''?

Warum erhalte ich in meiner MySQL-Abfrage die Fehlermeldung „Unbekannte Spalte ‚p.id' in ‚on-Klausel''?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-13 09:58:43134Durchsuche

Why am I getting an

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn