目标具有重复项的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上是唯一的吗?是的,它是唯一的,很抱歉遗漏了这一点