表中的多个更新

时间:2012-04-26 18:45:11

标签: sql oracle sql-update

我有一些数据,如某些价格123.4561,345.5671,121.3432,321.3452,1234.3423,需要分别更新为商品a,b,c,d,e的新价格。

我有1000个这样的记录。

我需要在表格中更新这些文章(全部1000个)的新价格(如上所述)。

编写1000个更新语句将是一项忙碌的工作。我正在考虑使用光标这样做。仍然无法承担所有价格并将其与特定价格联系起来。 问题是如何将特定文章与其新价格相关联并进行更新。

任何人都可以建议任何更简单的方法吗?谢谢!

3 个答案:

答案 0 :(得分:1)

你可以做到

UPDATE table1 SET price = 
CASE articles
 WHEN 'a' THEN 123.4561 
 WHEN 'b' THEN  345.5671
 ...
END   
WHERE articles IN ('a','b',....)

答案 1 :(得分:1)

格式或数据是什么?如果你的记事本有像

这样的行
art1,price1 
art2,price2
art3,price3

您可以将此信息导入数据库中的表(最好是在SQL Developer,Toad或您使用的任何IDE中使用import optio),

然后发布更新:

update table_articles a
set price = (select price from import_table where price = a.price);

答案 2 :(得分:0)

考虑使用MERGE

以下是标准SQL:

WITH source
     AS
     (
      SELECT * 
        FROM (
              VALUES ( 'a' ,  123.4561 ), 
                     ( 'b' ,  345.5671 ), 
                     ( 'c' ,  121.3432 ), 
                     ( 'd' ,  321.3452 ), 
                     ( 'e' , 1234.3423 )
             ) AS T ( articles , price )
     )
MERGE INTO YourTable
   USING source
      ON source.articles = YourTable.articles
WHEN MATCHED THEN
   UPDATE
      SET price = source.price;

Oracle支持非常接近这一点。请注意,公用表表达式(CTE)可以替换为分段基表。