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.

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top