MySql UNION for UPDATE

时间:2009-02-13 17:33:26

标签: mysql union

有没有办法使用单个SQL查询为每行更新具有不同值的多个行?我必须使用不同的数据更新许多行中的一个列。对每一行使用单独的更新查询似乎过多,所以如果有可能我想将此过程合并到一个SQL语句中,或者至少减少所需查询的数量。

我正在使用PHP和Zend框架以及MySql。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

具体不了解MySQL,但要根据SELECT或多个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

2014年10月28日更新,转换为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

答案 2 :(得分:0)

我知道这适用于SQL Server,所以在MySQL中值得一试。

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

您可以根据不同的行构建case语句。