是否可以在1 sql update语句中更新3个sql行

时间:2009-10-20 00:14:37

标签: sql

我有一个像这样的SQL表。

id          Order
======== =========
1                4
2                3
3                5
4                1
5                2

是否可以在1 sql语句中更新多行? 即我想更新id = 3,order = 1和id = 5,order = 4和id = 1,order = 1

我知道如何在3个更新语句中执行此操作。但我想知道我是否可以在1 sql update语句中更新3行。

谢谢。

4 个答案:

答案 0 :(得分:5)

您可以使用单个UPDATE语句执行此操作,但我不会打扰。

在这种情况下使用三个单独的更新更有意义。尝试用一个语句来完成它会使代码的可读性降低,而且更容易出错。

但是如果你真的想要单一的陈述,那么你可以去:

UPDATE your_table
SET order = CASE id
                WHEN 3 THEN 1
                WHEN 5 THEN 4
                WHEN 1 THEN 1
            END
WHERE id IN (3, 5, 1)

答案 1 :(得分:3)

为什么要在一个语句中更新三行?

如果所有行必须彼此同步,您可以执行以下操作:

BEGIN TRANSACTION;
UPDATE... ;
UPDATE... ;
UPDATE... ;
COMMIT

这样,开始和提交之间的所有工作要么全部完成,要么都没有完成。这是基于SQL的关系数据库的关键特性。即使SQLITE也有此功能。

答案 2 :(得分:1)

尝试这样的事情:

update Orders
set 
  Order = (
    case 
      when id = 3 then 1
      when id = 5 then 4
      when id = 1 then 1
    end
where id in (3, 5, 1)

取决于您的数据库。

答案 3 :(得分:0)

如果您的DBMS支持CASE,您可以使用CASE。