Вопрос

Есть ли способ обновить несколько строк с разными значениями для каждой строки, используя один SQL-запрос?Мне нужно обновить один столбец во многих строках с разными данными.Использование отдельных запросов на обновление для каждой строки кажется чрезмерным, поэтому, если это возможно, я хотел бы объединить этот процесс в один оператор SQL или, по крайней мере, уменьшить количество требуемых запросов.

Я использую PHP с платформой Zend и MySql.

Это было полезно?

Решение

Создайте временную таблицу и заполните ее:

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

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

Затем выдайте:

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

Другие советы

Не знаю конкретно о MySQL, но для обновления нескольких строк на основе SELECT или UNION нескольких SELECT я бы сделал

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

Обновление от 28.10.2014, преобразованное для работы с 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

Я знаю, что это работает для SQL Server, поэтому стоит попробовать в MySQL.

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

Вы можете построить оператор case на основе разных строк.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top