PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Instruction UPDATE avec plusieurs jointures dans PostgreSQL

Identique à une UPDATE valide déclaration dans 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

Vous ne pouvez pas simplement utiliser un alias de table dans le FROM clause comme table cible dans le UPDATE clause. La (une !) table à mettre à jour vient juste après UPDATE mot-clé (si nous ignorons un éventuel ONLY mot-clé entre les deux). Vous pouvez y ajouter un alias si vous le souhaitez. C'est la cause immédiate de votre message d'erreur, mais il y a plus.

La colonne à mettre à jour provient toujours de la table à mettre à jour et ne peut pas être qualifiée de table.

Vous n'avez pas besoin de répéter la table cible dans le FROM clause - sauf cas particuliers comme celui-ci :

Cet ajout facultatif peut éviter des frais inutiles en supprimant les mises à jour qui ne changent rien :

AND iw.warn_docket_no IS DISTINCT FROM iv.viol_docket_no

Voir :

Plus d'informations dans l'excellent manuel sur UPDATE .