任何人都可以帮我解决这个问题吗
表名称:RW_LN
LN_ID RE_LN_ID RE_PR_ID
LN001 RN001 RN002
LN002 RN002 RN003
LN003 RN003 RN001
LN004 RN001 RN002
我的更新查询是:
update table RW_LN set RE_LN_ID=(
select LN_ID
from RW_LN as n1,RW_LN as n2
where n1.RE_LN_ID = n2.RE_PR_ID)
我的预期结果是:
LN_ID RE_LN_ID
LN001 LN003
LN002 LN004
LN003 LN002
LN004 LN003
上面的查询显示错误为
SUB QUERY RETURNS MULTIPLE ROWS
。任何人都可以提供解决方案吗,我是 Oracle 9i 的初学者。所以卡在逻辑中
你可以尝试用
distinct
来解决这个问题
update table RW_LN set RE_LN_ID=(
select distinct LN_ID
from RW_LN as n1,RW_LN as n2
where n1.RE_LN_ID = n2.RE_PR_ID)
如果仍然返回多行,则意味着您在某个地方缺少联接,或者可能有需要使用主键的错误架构。
如果你想取“最大”对应的LN_ID,你可以这样做
update RW_LN r1
set r1.RE_LN_ID = (select MAX(LN_ID)
FROM RW_LN r2
where r1.RE_LN_ID = r2.RE_PR_ID);
参见 SqlFiddle
但是你应该解释为什么你选择(作为新的RE_LN_ID)LN004而不是LN001作为LN_ID LN002(因为你可以选择两者)
只是猜测,但这可能就是您想要的。
update
RW_LN n1
set
RE_LN_ID=(
select n2.LN_ID
from RW_LN n2
where n1.RE_LN_ID = n2.RE_PR_ID)
where exists (
select null
from RW_LN n2
where n1.RE_LN_ID = n2.RE_PR_ID and
n2.ln_id is not null)
目前您正在更新的行与子查询中返回的值之间没有相关性。
查询内容如下:
For every row in RW_LN change the value of RE_LN_ID to be:
the value of LN_ID in a row in RW_LN for which:
the RE_PR_ID equals the original tables value of RE_LN_ID
IF there exists at least one row in RW_LN for which:
RE_PR_ID is the same as RE_LN_ID in the original table AND
LN_ID is not null