2009-02-13 8 views
4

Existe-t-il un moyen 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 une colonne en plusieurs lignes avec des données différentes. L'utilisation de requêtes de mise à jour individuelles pour chaque ligne semble excessive, donc si c'est possible, j'aimerais consolider ce processus en une seule instruction SQL ou au moins réduire le nombre de requêtes requises. J'utilise PHP avec le framework Zend et MySql.MySQL UNION for UPDATE

Répondre

7

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 
0

Je sais que cela fonctionne pour SQL Server, il est donc la peine d'essayer de MySQL.

Vous pouvez construire l'instruction case en fonction de vos différentes lignes.

+0

Cela fonctionne dans MySql mais, quand vous ne changez pas la colonne a sur chaque entrée, les autres seront définis vides. – user63371

2

Ne sais pas MySQL spécifiquement, mais pour mettre à jour plusieurs lignes à partir 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 
+0

Désolé, comme je l'ai dit je ne connais pas la syntaxe MySQL. Cela fonctionnerait sur MS SQL Server. Peut-être existe-t-il une syntaxe différente dans MySQL qui permet une table UPDATE avec un JOIN? – Kristen