La réponse dépend beaucoup de la source des nouvelles valeurs.
Si vous avez une courte liste de nouvelles valeurs, vous pourrez peut-être utiliser CASE
:
UPDATE Table1
SET column1 = CASE column1
WHEN 123 THEN ?
WHEN 456 THEN ?
ELSE ?
END;
Ce n'est pas pratique si la liste des nouvelles valeurs est très longue.
Si vous avez besoin de mettre à jour vos lignes avec des valeurs qui existent dans les lignes corrélées d'une autre table, vous pouvez utiliser plusieurs tables de syntaxe UPDATE MySQL:
UPDATE Table1 JOIN Table2 ON (Table1.pk = Table2.fk)
SET Table1.column1 = Table2.column2;
Vous pouvez également faire quelque chose de similaire avec une sous-requête corrélée.
UPDATE Table1 SET column1 = (SELECT column2 FROM Table2 WHERE Table2.fk = Table1.pk);
Il y a longtemps quand je 3,23 MySQL (avant il a soutenu la mise à jour multi-table ou sous-requêtes), je courrais un SELECT
dont la sortie a été entièrement formé UPDATE. Il était difficile d'obtenir toutes les citations correctes, mais le résultat était un script SQL de centaines d'instructions UPDATE individuelles, chacune changeant les valeurs dans une rangée. Pas très efficace, mais si cela ne doit être fait que rarement, c'était bien.
SELECT CONCAT(
'UPDATE Table1 SET column1 = ', QUOTE(Table2.column2),
' WHERE pk = ', Table2.fk, ';') AS SQL_statement
FROM Table2;
Peut-être besoin de plus d'informations sur celui-ci. Est-ce que vous augmentez le champ, comme changer de 3 à 4? Toutes les lignes reçoivent-elles la même "nouvelle" valeur? Avez-vous un jeu de données qui inclut les nouvelles valeurs et les clés primaires correspondantes (ou autre champ)? – sberry