有没有办法使用单个SQL查询为每行更新具有不同值的多行?我必须用不同的数据更新许多行中的一个柱。对每一行使用单独的更新查询似乎过多,因此如果可能的话,我想将此过程合并到单个SQL语句中,或者至少减少所需的查询数。MySql UNION更新
我使用PHP与Zend框架和MySql。
有没有办法使用单个SQL查询为每行更新具有不同值的多行?我必须用不同的数据更新许多行中的一个柱。对每一行使用单独的更新查询似乎过多,因此如果可能的话,我想将此过程合并到单个SQL语句中,或者至少减少所需的查询数。MySql UNION更新
我使用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
我知道这适用于SQL Server中,所以它的价值在MySQL一试。
您可以根据您的不同行构建case语句。
不知道关于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
对不起,正如我所说我不知道MySQL的语法。这将在MS SQL Server上工作。也许MySQL中有一种不同的语法,允许UPDATE表和JOIN一起使用? – Kristen 2014-04-29 12:25:55
它可以在MySql中使用,但是如果您没有在每个条目上更改列表,其他列表都将设置为空。 – user63371 2009-02-14 18:49:28