Mise à jour plusieurs champs

Bonjour,

Je cherche à mettre à jour plusieurs champs à la fois mais n’arrive pas à trouver la syntaxe à utiliser. Où est l’erreur dans le SQL suivant ?

    UPDATE "Table3"
Set  "Bkp Adr"= "Table3"."Adresse", "Adresse"= "Table4"."Adresse", "Date" = CURDATE() 
 ( SELECT "Table3"."Adresse",   "Table4"."Adresse" FROM "Table3",  "Table4" WHERE "Table3"."Id" = "Table4"."Id" )

Réponse à l’exécution :

1: Column not found: Table4.Adresse

Le but de l’opération est de ne mettre à jour QUE les enregistrements ayant un correspondant dans l’autre table.

Merci d’avance.
Jacques

Bonjour

Le problème n’est sans doute pas la mise à jour de plusieurs champs d’une table (ce qui fonctionne sans problème) mais la sélection. Par exemple pour ne sélectionner que les enregistrements de Table1 pour lesquels on trouve un ID identique dans Table2 on pourrait faire :

SELECT  "Table1"."ID" FROM "Table1", "Table2" WHERE "Table1"."ID" = "Table2"."ID"

Ceci donne une liste des ID de Table1 à traiter. On peut alors faire par exemple :

UPDATE "Table1" SET "DATE"=CURDATE(), "Bkp Adr"=
(SELECT  "Table2"."Adresse" FROM "Table2" WHERE "Table1"."ID" = "Table2"."ID")
WHERE "Table1"."ID" IN
(SELECT  "Table1"."ID" FROM "Table1", "Table2" WHERE "Table1"."ID" = "Table2"."ID")

Ceci ne met à jour le champ Date de Table1 que pour les enregistrements concernés.

Par ailleurs ce n’est pas la question mais je m’interroge sur la redondance que tu sembles vouloir apporter par :

UPDATE "Table3" Set  "Bkp Adr"= "Table3"."Adresse"...

Cordialement

Bonjour,
Merci pour la réponse. Je pense que mon erreur est d’avoir voulu faire avec un seul SELECT; alors que je vois qu’il y en a plusieurs (1 par champ externe et un pour la clause IN.

Pour répondre à la question annexe, le but est de basculer l’ancienne adresse dans un champ de sauvegarde puis de mettre à jour l’adresse active à partir de la seconde table (j’ai pris adresse dans mon exemple mais dans ma table en exploitation, j’ai plusieurs champs que je souhaite sauver)

Avec les noms utilisés dans ma base de test, cela donne :

UPDATE "Table3" SET "Date"=CURDATE(), "Bkp Adr"="Adresse", "Adresse"=
(SELECT  "Table4"."Adresse" FROM "Table4" WHERE "Table3"."Id" = "Table4"."Id")
WHERE "Table3"."Id" IN
(SELECT  "Table3"."Id" FROM "Table3", "Table4" WHERE "Table3"."Id" = "Table4"."Id")