2010-08-18 84 views
2

我有这样的一个表: -更新多行SQL

 
Product ID   Weight 
A      100 
B      100 
C      100 
D      100 
E      100 

我想将它更改为: -

 
Product ID   Weight 
A      501 
B      601 
C      701 
D      801 
E      401 

我怎样才能做到这一点与SQL update命令??

回答

8

使用案例表达这样

UPDATE products SET 
Weight = 
CASE ProductID 
    WHEN 'A' THEN 501 
    WHEN 'B' THEN 601 
    WHEN 'C' THEN 701 
    WHEN 'D' THEN 801 
    WHEN 'E' THEN 401 
END 
WHERE ProductID in ('A', 'B', 'C', 'D', 'E') 

没有WHERE子句,表中的每一行会进行测试(不必要的,因为他们永远不会匹配)。

更多信息:CASE (Transact-SQL)Case OracleCase MySQL

+0

嗨, 我试图做一些额外的: - 更新产品集 重量= (CASE的ProductID 当 'a' THEN 501 当'B'然后601 当'C'然后701 当'D'然后801 当'E'然后401 结束) 其中Store ='HHH'和Company ='ABC' 系统提示时显示以下错误消息: - 错误:SQL0199 - 关键字WHERE不是预期的。有效令牌:SET。 (州:37000,本机代码:FFFFFF39) – Bob 2010-08-18 09:36:07

+0

使用什么RDBMS? (SQL SERVER,MySQL,Oracle,PostgreSQL) – gyromonotron 2010-08-18 09:44:21

+0

SQL SERVER ...... – Bob 2010-08-18 09:56:50

0
UPDATE [TABLE] SET Weight = 501 WHERE [Product ID] = 'A' 
GO 
UPDATE [TABLE] SET Weight = 601 WHERE [Product ID] = 'B' 
GO 
UPDATE [TABLE] SET Weight = 701 WHERE [Product ID] = 'C' 
GO 
UPDATE [TABLE] SET Weight = 801 WHERE [Product ID] = 'D' 
GO 
UPDATE [TABLE] SET Weight = 401 WHERE [Product ID] = 'E' 
GO 
+0

这是为单行但我有多行。怎么做 ? – Bob 2010-08-18 09:40:07

+0

加入更多人 – 2010-08-18 09:48:46

+0

更新[TABLE] SET Weight = 501 WHERE [Product ID] ='A' UPDATE [TABLE] SET Weight = 601 WHERE [Product ID] ='B' UPDATE [TABLE] SET Weight = 701 [产品ID] ='C' UPDATE [TABLE] SET Weight = 801 WHERE [Product ID] ='D' UPDATE [TABLE] SET Weight = 401 WHERE [Product ID] ='E' I hv run一次一个。我不能一起执行它们?有没有办法同时运行它们。 – Bob 2010-08-18 09:56:01