有没有办法使用单个 SQL 查询为每行更新具有不同值的多行?我必须用不同的数据更新多行中的一列。对每一行使用单独的更新查询似乎太过分了,所以如果可能的话,我想将此过程合并到一个 SQL 语句中,或者至少减少所需的查询数量。
我将 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
不具体了解 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
我知道这适用于 SQL Server,所以在 MySQL 中值得一试。
update xtable
set a =
Case
when a = "a"
then z
when a = "b"
then y
End
where ...
您可以根据不同的行构造 case 语句。