Den Fehler „Spalte existiert nicht“ in Postgresql verstehen
Beim Versuch, eine scheinbar einfache Postgresql-Abfrage auszuführen, kann es zu einem Fehler kommen behauptet, dass die angegebene Spalte nicht existiert. Dies kann rätselhaft sein, insbesondere wenn bekannt ist, dass die betreffende Spalte in der Datenbank vorhanden ist.
Untersuchung des Problems
Eine typische Abfrage, die diesen Fehler auslöst, ähnelt der Folgendes:
SELECT * FROM employee WHERE "lName" LIKE "Smith"
Die Fehlermeldung weist jedoch darauf hin, dass die Spalte „Smith“ nicht existiert, was angesichts der tatsächlichen Spalte rätselhaft ist Name ist „lName“.
Ursache des Fehlers
Der Fehler beruht auf einem Missverständnis darüber, wie Postgresql doppelte Anführungszeichen („“) in einer SQL-Anweisung interpretiert. In Postgresql schließen doppelte Anführungszeichen Bezeichner in Anführungszeichen ein, die auf Datenbankobjekte wie Tabellennamen und Spaltennamen verweisen. In diesem Fall erstellen die doppelten Anführungszeichen um „Smith“ jedoch stattdessen eine Zeichenfolgenkonstante.
Korrigieren der Abfrage
Um das Problem zu beheben, sollte die Abfrage geändert werden um den Spaltennamen „lName“ korrekt in Anführungszeichen zu setzen:
SELECT * FROM employee WHERE "lName" LIKE 'Smith'
Hier werden einfache Anführungszeichen (') verwendet, um den Wert einzuschließen 'Smith' erstellt ein String-Literal zum Vergleich.
Zusätzliche Überlegungen
Neben dem Zitieren ist das fehlende Platzhalterzeichen im LIKE-Vergleich eine weitere potenzielle Quelle für Verwirrung. Normalerweise enthält eine LIKE-Operation ein Platzhalterzeichen (%), das mit einer beliebigen Anzahl von Zeichen übereinstimmt. In dieser Abfrage ist es möglicherweise sinnvoller, Folgendes zu verwenden:
SELECT * FROM employee WHERE "lName" LIKE 'Smith%'
Dadurch wird sichergestellt, dass Zeilen, in denen der Wert in der Spalte „lName“ mit „Smith“ beginnt, in die Ergebnismenge aufgenommen werden.
Das obige ist der detaillierte Inhalt vonWarum gibt meine Postgresql-Abfrage den Fehler „Spalte existiert nicht' zurück, obwohl die Spalte vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!