Postgres-Fehler „fehlender FROM-Klausel-Eintrag“ bei Abfrage mit WITH-Klausel
-
10-12-2019 - |
Frage
Ich versuche, diese Abfrage in Postgres 9.1.3 zu verwenden:
WITH stops AS (
SELECT citation_id,
rank() OVER (ORDER BY offense_timestamp,
defendant_dl,
offense_street_number,
offense_street_name) AS stop
FROM consistent.master
WHERE citing_jurisdiction=1
)
UPDATE consistent.master
SET arrest_id = stops.stop
WHERE citing_jurisdiction=1
AND stops.citation_id = consistent.master.citation_id;
Ich erhalte diesen Fehler:
ERROR: missing FROM-clause entry for table "stops"
LINE 12: SET arrest_id = stops.stop
^
********** Error **********
ERROR: missing FROM-clause entry for table "stops"
SQL state: 42P01
Character: 280
Ich bin wirklich verwirrt.Die WITH-Klausel scheint gemäß der Postgres-Dokumentation korrekt zu sein.Wenn ich die Abfrage separat in der WITH-Klausel ausführe, erhalte ich korrekte Ergebnisse.
Lösung
Von dem feines Handbuch:
Es gibt zwei Möglichkeiten, eine Tabelle mithilfe von Informationen zu ändern, die in anderen Tabellen in der Datenbank enthalten sind:Verwenden von Unterauswahlen oder Angeben zusätzlicher Tabellen in der
FROM
Klausel.
Sie benötigen also lediglich eine FROM-Klausel:
WITH stops AS (
-- ...
)
UPDATE consistent.master
SET arrest_id = stops.stop
FROM stops -- <----------------------------- You missed this
WHERE citing_jurisdiction=1
AND stops.citation_id = consistent.master.citation_id;
Die Fehlermeldung sagt sogar Folgendes:
FEHLER:Fehlender FROM-Klausel-Eintrag für Tabelle „Stopps“
Andere Tipps
Dies kann auch passieren, wenn Sie einen Tabellennamen falsch eingeben.Zum Beispiel:
UPDATE profiles SET name = ( profile.first_name ) WHERE id = 1
Anstatt profiles
Ich habe es falsch verwendet profile
!!Das würde funktionieren:
UPDATE profiles SET name = ( profiles.first_name ) WHERE id = 1