2009-10-20 90 views
4

我有一个像这样的SQL表。是否有可能在1个sql更新语句中更新3个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更新语句中更新3行。

谢谢。

回答

0

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

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) 

数据库上取决于虽然。

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) 
3

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

如果行都必须彼此同步,你可以这样做:

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

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

+0

对。除非你深入兔子洞,发现这两件事情不一定相同。请参阅事务隔离级别。 – 2009-10-20 00:51:40