我有一个像这样的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行。
谢谢。
答案 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。