【发布时间】:2015-10-07 15:35:02
【问题描述】:
我有一张名为: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 更新中只会输出一行,并且可能会更新数千行具有相同地址和名称且属于订单号的行。
订单号是要使用的连接列...
亲切的问候
【问题讨论】:
标签: sql oracle merge cursor sql-update