sql >> Base de Datos >  >> RDS >> PostgreSQL

Declaración UPDATE con múltiples uniones en PostgreSQL

Lo mismo que UPDATE válido declaración en 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

No puede simplemente usar un alias de tabla en el FROM cláusula como tabla de destino en UPDATE cláusula. La (¡una!) tabla que se actualizará viene justo después de UPDATE palabra clave (si ignoramos un posible ONLY palabra clave intermedia). Puede agregar un alias allí si lo desea. Esa es la causa inmediata de su mensaje de error, pero hay más.

La columna que se actualizará siempre es de la tabla que se actualizará y no se puede calificar para la tabla.

No necesita repetir la tabla de destino en el FROM cláusula - excepto en casos especiales como este:

Esta adición opcional puede evitar costos inútiles al suprimir las actualizaciones que no cambian nada:

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

Ver:

Más información en el excelente manual sobre UPDATE .