J'ai ces tables et valeurs:
Table1
------------------------
ID | Value
------------------------
2 | asdf
4 | fdsa
5 | aaaa
Table2
------------------------
ID | Value
------------------------
2 | bbbb
4 | bbbb
5 | bbbb
Je veux mettre à jour toutes les valeurs de Table2 en utilisant les valeurs de Table1 avec leurs ID respectifs.
Est-il possible de faire cela avec une simple requête SQL?
Exécutez une sélection pour vous assurer que c'est ce que vous voulez
SELECT t1.value AS NEWVALUEFROMTABLE1,t2.value AS OLDVALUETABLE2,*
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID
Mettre à jour
UPDATE Table2
SET Value = t1.Value
FROM Table2 t2
INNER JOIN Table1 t1 on t1.ID = t2.ID
Pensez également à utiliser BEGIN TRAN
pour pouvoir l'annuler si nécessaire, mais assurez-vous de le nommer COMMIT
lorsque vous êtes satisfait.
Si vous avez des identifiants dans les deux tables, ceci fonctionne:
update table2
set value = (select value from table1 where table1.id = table2.id)
Une meilleure approche est peut-être une jointure:
update table2
set value = table1.value
from table1
where table1.id = table2.id
Notez que cette syntaxe fonctionne dans SQL Server mais peut être différente dans d'autres bases de données.
Vous pouvez utiliser alias pour améliorer la requête:
UPDATE t1
SET t1.Value = t2.Value
FROM table1 AS t1
INNER JOIN
table2 AS t2
ON t1.ID = t2.ID
Aucune des réponses ci-dessus n'a fonctionné pour moi dans MySQL , la requête suivante a néanmoins fonctionné:
UPDATE
Table1 t1
JOIN
Table2 t2 ON t1.ID=t2.ID
SET
t1.value =t2.value
WHERE
...
J'ai utilisé celui-ci sur MySQL, MS Access et SQL Server. Les champs id sont les champs sur lesquels les tables coïncident, pas nécessairement l'index primaire.
UPDATE DestTable INNER JOIN SourceTable ON DestTable.idField = SourceTable.idField SET DestTable.Field1 = SourceTable.Field1, DestTable.Field2 = SourceTable.Field2...