PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

UPDATE-Anweisung mit mehreren Joins in PostgreSQL

Das gleiche wie gültiges UPDATE Anweisung in Postgres:

UPDATE incode_warrants iw
SET    warn_docket_no = iv.viol_docket_no
FROM   incode_warrantvs  iwvs
JOIN   incode_violations iv ON iv.viol_citation_no = iwvs.warnv_citation_no
                           AND iv.viol_viol_no = iwvs.warnv_viol_no
WHERE  iw.warn_rid = iwvs.warnv_rid;
-- AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no -- see below

Sie können nicht einfach einen Tabellenalias in FROM verwenden -Klausel als Zieltabelle im UPDATE Klausel. Die (eine!) zu aktualisierende Tabelle kommt direkt nach UPDATE Schlüsselwort (wenn wir einen möglichen ONLY ignorieren Stichwort dazwischen). Wenn Sie möchten, können Sie dort einen Alias ​​hinzufügen. Das ist die unmittelbare Ursache Ihrer Fehlermeldung, aber es gibt noch mehr.

Die zu aktualisierende Spalte stammt immer aus der einen zu aktualisierenden Tabelle und kann nicht tabellenqualifiziert werden.

Sie müssen die Zieltabelle im FROM nicht wiederholen -Klausel - mit Ausnahme von Sonderfällen wie diesem:

Diese optionale Ergänzung kann unnötige Kosten vermeiden, indem Updates unterdrückt werden, die nichts ändern:

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

Siehe:

Mehr dazu im ausgezeichneten Handbuch zu UPDATE .