Instruction de mise à JOUR avec plusieurs jointures dans PostgreSQL
Je suis en train de mettre à jour une table appelée incode_warrants
et définir la warn_docket_no
à la viol_docket_no
de la incode_violations
table.
J'ai de la requête SQL suivante dans Postgresql 9.3, mais quand il se déclenche, j'obtiens l'erreur suivante:
Error : ERROR: relation "iw" does not exist LINE 1: update iw
Je suis plus Active Record personne donc mes premières compétences SQL, sont nettement insuffisantes. Je me demandais si quelqu'un pouvait aider à me diriger dans la bonne direction sur la façon d'obtenir cette requête droit.
update iw
set iw.warn_docket_no = iv.viol_docket_no
from incode_warrants as iw
INNER JOIN incode_warrantvs as iwvs
on iw.warn_rid = iwvs.warnv_rid
INNER JOIN incode_violations as iv
ON iv.viol_citation_no = iwvs.warnv_citation_no and iv.viol_viol_no = iwvs.warnv_viol_no
Vous devez vous connecter pour publier un commentaire.
Le même que valide
UPDATE
déclaration dans Postgres:Vous ne pouvez pas simplement utiliser un alias de la table dans le
FROM
clause table cible dans laUPDATE
clause. L' (un seul!) le tableau sera mis à jour vient juste aprèsUPDATE
. Vous pouvez ajouter un alias de là, si vous le souhaitez. C'est la cause immédiate de votre message d'erreur, mais il n'y a plus d'.La colonne de mise à jour est toujours sur la table à mettre à jour et ne peut pas être qualifié.
Vous n'avez pas besoin de répéter la table cible dans la
FROM
clause.Tout cela et plus encore dans l'excellent manuel.
Votre requête devrait ressembler à ceci:
Vous n'avez pas besoin d'une autre jointure. Avec cette requête que vous venez de mettre à jour une colonne dans une table de valeurs à partir d'une colonne d'une autre table. Bien sûr, il met à jour uniquement lorsque
WHERE
condition est vraie.Error : ERROR: column incode_warrants.warnv_citation_no does not exist LINE 4: WHERE incode_violations.viol_citation_no = incode_warrants.w...
incode_warrants
etincode_warrantvs
sont deux tables différentes - à moins que ce soit une faute de frappe dans la question, bien sûr.incode_warrantvs
c'est pourquoi je baisse voté.Votre mise à jour d'une table, de ne pas le rejoindre
UPDATE
déclaration dans Postgres.