Poser votre question
0

mise à jour plusieurs champs

posée 2019-11-28 21:05:56 +0100

Image Gravatar de Jacques-64

updated 2019-11-28 22:11:59 +0100

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

éditer requalifier signaler fermer fusionner supprimer

1Réponse

0

répondue 2019-11-29 10:42:02 +0100

Image Gravatar de pierre-yves samyn

updated 2019-11-29 10:42:36 +0100

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

éditer signaler supprimer permalien plus

Commentaires

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")
Image Gravatar de Jacques-64Jacques-64 ( 2019-11-29 11:12:34 +0100 )éditer
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2019-11-28 21:05:56 +0100

Consultée: 17 fois

Mise à jour: Nov 29