有没有办法使用单个SQL查询为每行更新具有不同值的多个行?我必须使用不同的数据更新许多行中的一个列。对每一行使用单独的更新查询似乎过多,所以如果有可能我想将此过程合并到一个SQL语句中,或者至少减少所需查询的数量。
我正在使用PHP和Zend框架以及MySql。
答案 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语句。