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
.