PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Istruzione UPDATE con più join in PostgreSQL

Lo stesso di UPDATE valido dichiarazione 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

Non puoi semplicemente usare un alias di tabella nel FROM clausola come tabella di destinazione in UPDATE clausola. La (una!) tabella da aggiornare arriva subito dopo UPDATE parola chiave (se ignoriamo un possibile ONLY parola chiave in mezzo). Puoi aggiungere un alias lì se lo desideri. Questa è la causa immediata del tuo messaggio di errore, ma c'è dell'altro.

La colonna da aggiornare è sempre della tabella da aggiornare e non può essere qualificata come tabella.

Non è necessario ripetere la tabella di destinazione nel FROM clausola - salvo casi speciali come questo:

Questa aggiunta facoltativa può evitare costi inutili sopprimendo gli aggiornamenti che non cambiano nulla:

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

Vedi:

Altro nell'eccellente manuale su UPDATE .