Postgres: „where in (list)“ – Ungültige Spaltenreferenz
In SQL Server würde die folgende Abfrage erfolgreich Zeilen aus löschen user_job_titles-Tabelle basierend auf einer Liste von IDs:
DELETE FROM user_job_titles WHERE id IN ( "c836d018-1d12-4507-a268-a4d80d6d3f54", "d0961a90-7d31-4c4c-9c1b-671115e3d833", "62dda420-6e62-4017-b41d-205c0aa82ead" )
Allerdings, wenn versucht wird, diese Abfrage in auszuführen Postgres, ein Fehler tritt auf:
ERROR: column "c836d018-1d12-4507-a268-a4d80d6d3f54" does not exist
Ursache:
Das Problem liegt in der Verwendung von doppelten Anführungszeichen um die ID-Werte in der IN-Klausel. In Postgres sind doppelte Anführungszeichen als Escape-Zeichen für Tabellen- und Spaltennamen reserviert. Durch die Verwendung um die IDs interpretiert Postgres sie als Verweise auf nicht vorhandene Spalten, was zu dem Fehler führt.
Lösung:
Um dieses Problem zu beheben, ersetzen Sie die doppelte Anführungszeichen mit einfachen Anführungszeichen:
DELETE FROM user_job_titles WHERE id IN ('c836d018-1d12-4507-a268-a4d80d6d3f54', 'd0961a90-7d31-4c4c-9c1b-671115e3d833', '62dda420-6e62-4017-b41d-205c0aa82ead' );
Durch die Verwendung von einfachen Anführungszeichen werden die IDs als String-Konstanten interpretiert, was die IN-Klausel ermöglicht um richtig zu funktionieren.
Das obige ist der detaillierte Inhalt vonPostgres vs. SQL Server: Warum schlägt meine „WHERE IN (list)'-Abfrage mit einem ungültigen Spaltenverweis fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!