PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Instrução UPDATE com várias junções no PostgreSQL


O mesmo que UPDATE válido declaração no 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

Você não pode simplesmente usar um alias de tabela no FROM cláusula como tabela de destino no UPDATE cláusula. A (uma!) tabela a ser atualizada vem logo após UPDATE palavra-chave (se ignorarmos uma possível ONLY palavra-chave no meio). Você pode adicionar um alias lá, se quiser. Essa é a causa imediata da sua mensagem de erro, mas há mais.

A coluna a ser atualizada é sempre de uma tabela a ser atualizada e não pode ser qualificada de tabela.

Você não precisa repetir a tabela de destino no FROM cláusula - exceto para casos especiais como este:

Essa adição opcional pode evitar custos inúteis ao suprimir atualizações que não alteram nada:
AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

Ver:

Mais no excelente manual sobre UPDATE .