2009-02-13 88 views
4

有没有办法使用单个SQL查询为每行更新具有不同值的多行?我必须用不同的数据更新许多行中的一个柱。对每一行使用单独的更新查询似乎过多,因此如果可能的话,我想将此过程合并到单个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中使用,但是如果您没有在每个条目上更改列表,其他列表都将设置为空。 – user63371 2009-02-14 18:49:28

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 
+0

对不起,正如我所说我不知道​​MySQL的语法。这将在MS SQL Server上工作。也许MySQL中有一种不同的语法,允许UPDATE表和JOIN一起使用? – Kristen 2014-04-29 12:25:55