具有多个SET和WHERE的SQL语句

时间:2011-06-22 20:36:05

标签: sql db2

我想知道这是否是一个有效的查询:

UPDATE  table
SET ID = 111111259

WHERE ID = 2555

AND SET ID = 111111261

WHERE ID = 2724

AND SET ID = 111111263

WHERE ID = 2021

AND SET ID = 111111264

WHERE ID = 2017

11 个答案:

答案 0 :(得分:44)

NO!

您需要单独处理

Update [table]
Set ID = 111111259
WHERE ID = 2555

Update [table]
Set ID = 111111261
WHERE ID = 2724

--...

答案 1 :(得分:42)

最佳选择是多次更新。

或者您可以执行以下操作,但建议

UPDATE table
SET ID = CASE WHEN ID = 2555 THEN 111111259 
              WHEN ID = 2724 THEN 111111261
              WHEN ID = 2021 THEN 111111263
              WHEN ID = 2017 THEN 111111264
         END
WHERE ID IN (2555,2724,2021,2017)

答案 2 :(得分:13)

没有。这不是一个有效的查询。 您只能有一个具有多个字段的SET语句,但是,还有一个WHERE子句

update table1 set field1=value1, field2=value2, field3=value3 where filed4=value5

答案 3 :(得分:4)

不是,您就是这样做的:

UPDATE table SET ID = 111111259 WHERE ID = 2555

UPDATE table SET ID = 111111261 WHERE ID = 2724

UPDATE table SET ID = 111111263 WHERE ID = 2021

UPDATE table SET ID = 111111264 WHERE ID = 2017

答案 4 :(得分:3)

不,您需要为每次更新创建单独的查询。

答案 5 :(得分:2)

没有。您必须单独更新:

UPDATE  table
SET ID = 111111259
WHERE ID = 2555

UPDATE  table
SET ID = 111111261
WHERE ID = 2724

UPDATE  table
SET ID = 111111263
WHERE ID = 2021

UPDATE  table
SET ID = 111111264
WHERE ID = 2017

答案 6 :(得分:2)

既然sql那些你想要它做的所有行,我会做你喜欢的代码

在你的内部Sql管理也执行查询,这应该有效。

UPDATE  table
SET ID = 111111259 WHERE ID = 2555    

UPDATE  table
SET ID = 111111261 WHERE ID = 2724

UPDATE  table
SET ID = 111111263 WHERE ID = 2021

UPDATE  table
SET ID = 111111264 WHERE ID = 2017

答案 7 :(得分:2)

您也可以像这样使用案例:

UPDATE  table
SET ID = case

when ID = 2555 then 111111259

when ID = 2724 then 111111261

when ID = 2021 then 111111263

when ID = 2017 then 111111264

else ID
end

答案 8 :(得分:0)

不,你需要单独处理每个陈述..

UPDATE table1
 Statement1;
 UPDATE table 1
 Statement2;

等等

答案 9 :(得分:0)

您可以这样做

WITH V(A,B) AS (VALUES 
     (2555,111111259)    
    ,(2724,111111261)     
    ,(2021,111111263)    
    ,(2017,111111264)    

    )
SELECT COUNT(*) FROM NEW TABLE (
    UPDATE table
    SET id =     (SELECT B FROM V WHERE ID = A)
    WHERE EXISTS (SELECT B FROM V WHERE ID = A)
) 

注意,不适用于按列组织的表。在这种情况下,请使用MERGE

答案 10 :(得分:-1)

使用查询终止符字符串并在SQL客户端应用程序的选项中设置它。我使用GO作为查询终止符。

您的SQL看起来像这样;

UPDATE table SET ID = 111111259 WHERE ID = 2555 GO
UPDATE table SET ID = 111111261 WHERE ID = 2724 GO
UPDATE table SET ID = 111111263 WHERE ID = 2021 GO
UPDATE table SET ID = 111111264 WHERE ID = 2017 GO

这将允许您执行Ctrl + A并一次运行所有行。

字符串终止符告诉SQL客户端更新语句已完成并转到下一行并处理下一个语句。

希望有所帮助