有没有办法使用单个 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 语句。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top