2009-02-13 5 views
4

Есть ли способ обновить несколько строк с разными значениями для каждой строки, используя один SQL-запрос? Я должен обновить один colum во многих строках с разными данными. Использование отдельных запросов на обновление для каждой строки кажется чрезмерным, поэтому, если это возможно, я хотел бы объединить этот процесс в один оператор SQL или, по крайней мере, сократить количество запросов.MySql UNION для ОБНОВЛЕНИЯ

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

ответ

7

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

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 
0

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

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

+0

Он работает в MySql, но если вы не измените colum a на каждой записи, остальные будут пустыми. – user63371

2

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

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 

Update 10/28/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 
+0

Извините, как я уже сказал, я не знаю синтаксиса MySQL. Это будет работать на MS SQL Server. Возможно, в MySQL существует другой синтаксис, который позволяет использовать таблицу UPDATE вместе с JOIN? – Kristen