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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top