MySql UNION для обновления - PullRequest
       5

MySql UNION для обновления

4 голосов
/ 13 февраля 2009

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

Я использую PHP с Zend Framework и MySql.

Ответы [ 3 ]

7 голосов
/ 13 февраля 2009

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

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
2 голосов
/ 13 февраля 2009

Не знаю конкретно о 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
0 голосов
/ 13 февраля 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...