目标具有重复项的Oracle更新

目标具有重复项的Oracle更新,oracle,Oracle,假设我有下列表格 目标表 sales ID ItemNum DiscAmt OrigAmt 1 123 20.00 NULL 2 456 30.00 NULL 3 123 20.00 NULL 源表 prices ItemNum OrigAmt 123 25.00 456

假设我有下列表格

目标表

   sales
   ID      ItemNum     DiscAmt    OrigAmt
   1       123         20.00      NULL
   2       456         30.00      NULL
   3       123         20.00      NULL
源表

   prices 
   ItemNum      OrigAmt
   123          25.00
   456          35.00
我尝试使用源表中的折纸更新目标表中的折纸

  UPDATE
  (   SELECT    s.OrigAmt dests
          ,p.OrigAmt srcs            
      FROM      sales s
      LEFT JOIN prices p
      ON        s.ItemNum = p.ItemNum
   ) amnts
   SET amnts.dests = amnts.srcs
   ;
但是我得到:ORA-01779:无法修改映射到非键保留表的列
我也尝试过使用合并,但我得到:ORA-30926:无法在源表中获得一组稳定的行

通常无法更新任意选择的结果

单语句,假设ItemNum是prices的主键:

 UPDATE sales WHERE (SELECT count(price.ItemNum) FROM price 
     WHERE price.ItemNum = sales.ItemNum) > 0
 SET OrigAmt = 
     (SELECT MAX(OrigAmt) FROM price 
     WHERE price.ItemNum = sales.ItemNum) 
您可以忽略WHERE和/或MAX

不太复杂:将光标循环到

 SELECT ItemNum, OrigAmt FROM price 
对价格表中的每个ItemNum执行多个更新:

 UPDATE sales SET OrigAmt=? WHERE ItemNum=? 

您的源表在ItemNum上是唯一的吗?是的,它是唯一的,很抱歉遗漏了这一点