Question
Est-il possible de mettre à jour plusieurs lignes avec des valeurs différentes pour chaque ligne à l'aide d'une seule requête SQL? Je dois mettre à jour un Colum dans de nombreuses lignes avec des données différentes. Utilisation de requêtes individuelles de mise à jour pour chaque ligne semble excessive s'il est possible que je voudrais consolider ce processus en une seule instruction SQL ou au moins réduire le nombre de requêtes nécessaires.
J'utilise PHP avec le framework Zend et MySql.
La solution
Créer une table temporaire et le remplir avec:
CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200))
INSERT
INTO temptable
VALUES
('1', 'val1'),
('2', 'val2'),
('3', 'val3'),
('4', 'val4')
Alors question:
UPDATE
mytable m, temptable t
SET m.value = t.value
WHERE m.id = t.id
Autres conseils
Je ne sais pas MySQL spécifiquement, mais de mettre à jour plusieurs lignes en fonction d'un SELECT, ou une union de plusieurs SELECTs, je ferais
UPDATE U
SET MyColumn = T.OtherColumn
FROM MyUpdateTable AS U
JOIN
(
SELECT [OtherColumn] = OtherColumn1
FROM MyOtherTable1
WHERE ...
UNION
SELECT OtherColumn2
FROM MyOtherTable2
WHERE ...
) AS T
ON T.ID = U.ID
Mise à jour 28/10/2014, converti à travailler pour MySQL:
UPDATE MyUpdateTable AS U
JOIN
(
SELECT [OtherColumn] = OtherColumn1
FROM MyOtherTable1
WHERE ...
UNION
SELECT OtherColumn2
FROM MyOtherTable2
WHERE ...
) AS T
ON T.ID = U.ID
SET MyColumn = T.OtherColumn
Je sais que cela fonctionne pour SQL Server, il est donc la peine d'essayer MySQL.
update xtable
set a =
Case
when a = "a"
then z
when a = "b"
then y
End
where ...
Vous pouvez construire la déclaration de cas en fonction de vos différentes lignes.