Вопрос
Есть ли способ обновить несколько строк с разными значениями для каждой строки, используя один 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 на основе разных строк.