26 votes

Mise à jour MySQL avec sous-sélection

J'ai une table, appelons-la table1, et les données de deux des colonnes ont été détruites.

Heureusement, j'ai une vieille sauvegarde de la table.

Dans l'ancienne sauvegarde, les valeurs des deux colonnes en question sont correctes, mais le reste des colonnes est périmé. Je ne peux donc pas simplement importer l'ensemble de la sauvegarde.

Donc à la place, je l'ai importé dans une autre table que j'appellerai table2. Chaque enregistrement a un identifiant qui est le même dans les deux tables.

J'ai donc besoin d'une requête qui passe en revue chaque enregistrement de la table 1 et mette à jour les colonnes 1 et 2 avec les valeurs correspondantes de la table 2.

54voto

niktrs Points 4013

La table originale est la table 1 et la table de sauvegarde est la table 2.

UPDATE table1 t1 JOIN table2 t2 ON t1.id = t2.id
SET t1.col1 = t2.col1, t1.col2 = t2.col2, ...

22voto

Bohemian Points 134107

Cela fonctionnera sur toutes les versions de la base de données SQL :

update table1 t set
column1 = (select column1 from old_table where id = t.id),
column2 = (select column2 from old_table where id = t.id);

Il n'est pas nécessaire d'utiliser des fonctions spéciales/agrégées, car la correspondance de l'identifiant ne concerne qu'une seule ligne.

0voto

danyolgiax Points 5460

Je pense que vous pouvez essayer quelque chose comme ça :

UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X