我有一个名为ORDERS的表
此表包含OrderNumber,它属于该人的同一个人和相同的地址行。
但有时数据不一致; 例如,查看表截图:Orders table with bad data to fix -
你们都注意到orderNumber 1有一个与line1-2-3-4相关联的名称。有时这些都是由某些角色所有,甚至是空的。
我的目标是使用已经存在的一组数据更新所有这3行,并将所有3行均等地设置。
更清楚地说明预期的结果应该是这样的:
我目前正在使用MERGE语句来避免使用CURSOR(for循环)
但是我遇到了问题才能让它发挥作用
这里是SQL
MERGE INTO ORDERS O USING
(SELECT
INNER.ORDERNUMBER,
INNER.NAME,
INNER.LINE1,
INNER.LINE2,
INNER.LINE3,
INNER.LINE4
FROM ORDERS INNER
) TEMP
ON( O.ORDERNUMBER = TEMP.ORDERNUMBER )
WHEN MATCHED THEN
UPDATE
SET
O.NAME = TEMP.NAME,
O.LINE1 = TEMP.LINE1,
O.LINE2 = TEMP.LINE2,
O.LINE3 = TEMP.LINE3,
O.LINE4 = TEMP.LINE4;
我面临的最大问题是随机选择3行中的一行 - 这与数据无关 - 我选择更新行的行 只要我对订单号做出相同的记录,就可以了。
我也使用了ROWNUM =1
但它在multip [le更新中只会输出一行并更新数千行具有相同地址和名称的行,这些行属于订单号。
订单号是要使用的连接列...
亲切的问候
答案 0 :(得分:0)
update
语句中的简单相关子查询应该有效:
update orders t1
set (t1.name, t1.line1, t1.line2, t1.line3, t1.line4) =
(select t2.name, t2.line1, t2.line2, t2.line3, t2.line4
from orders t2
where t2.OrderNumber = t1.OrderNumber
and rownum < 2)