Pergunta

Existe uma maneira de atualizar várias linhas com valores diferentes para cada linha usando uma única consulta SQL? Eu tenho que atualizar um colum em muitas linhas com dados diferentes. O uso de consultas individuais de atualização para cada linha parece excessivo; portanto, se for possível, eu gostaria de consolidar esse processo em uma única instrução SQL ou pelo menos reduzir o número de consultas necessárias.

Estou usando o PHP com a estrutura ZEND e o MySQL.

Foi útil?

Solução

Crie uma tabela temporária e preencha -a com:

CREATE TEMPORARY TABLE temptable (id INTEGER, VALUE VARCHAR(200))

INSERT
INTO temptable
VALUES
  ('1', 'val1'),
  ('2', 'val2'),
  ('3', 'val3'),
  ('4', 'val4')

Então edição:

UPDATE
  mytable m, temptable t
SET m.value = t.value
WHERE m.id = t.id

Outras dicas

Não sei sobre o MySQL especificamente, mas para atualizar várias linhas com base em uma seleção ou em uma união de várias seleções, eu faria

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

ATUALIZAÇÃO 28/10/2014, convertido para trabalhar para 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

Eu sei que isso funciona para o SQL Server, por isso vale a pena tentar no MySQL.

update xtable
set a = 
   Case
     when a = "a"
     then z
     when a = "b"
     then y
   End
where ...

Você pode construir a instrução CASE com base em suas diferentes linhas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top