sql >> Databáze >  >> RDS >> PostgreSQL

Příkaz UPDATE s více připojeními v PostgreSQL

Stejné jako platné UPDATE prohlášení v 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

Nemůžete použít pouze alias tabulky v FROM klauzule jako cílová tabulka v UPDATE doložka. (jedna!) tabulka, která má být aktualizována, přichází hned po UPDATE klíčové slovo (pokud ignorujeme možné ONLY klíčové slovo mezi nimi). Pokud chcete, můžete tam přidat alias. To je bezprostřední příčina vaší chybové zprávy, ale je toho víc.

Sloupec, který má být aktualizován, je vždy z jedné tabulky, která má být aktualizována, a nelze jej kvalifikovat pro tabulku.

Není třeba opakovat cílovou tabulku v FROM klauzule - kromě speciálních případů, jako je tento:

Tento volitelný doplněk může zabránit zbytečným nákladům tím, že potlačí aktualizace, které nic nemění:

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

Viz:

Více ve skvělé příručce na UPDATE .



  1. Součtový rozsah dat bez počítání překryvů v mysql

  2. Snažím se vytvořit dvě různé tabulky manytoone mapování v jednom sloupci pro jednu třídu entity

  3. Oracle PL/SQL:Nápověda k vyřešení PLS-00103:Setkal se se symbolem LOOP při očekávání jedné z následujících situací:pokud

  4. SQL sloupec číslování - MySQL