【发布时间】:2015-12-11 13:27:41
【问题描述】:
我正在运行以下 Oracle 更新语句并出现错误:
ORA-01427: 单行子查询返回多于一行
UPDATE Maximo.laborcraftrate lcr
SET lcr.controlaccount = (SELECT c.mxrcontrolaccount
FROM maximo.contract c
WHERE lcr.contractnum = c.CONTRACTNUM)
WHERE EXISTS (SELECT controlaccount
FROM maximo.contract c
WHERE lcr.contractnum = c.contractnum);
有人知道如何限制子查询吗?
编辑:
这是一个显示表之间连接的选择语句。我想做的是在这些条件下用 b.controlaccount 更新 a.controlaccount:
CRAFT CONTRACTNUM CONTROLACCOUNT MXRCONTROLACCOUNT
TR-CHNDI TR-GENERAL 01-3010-72515
TR-CHNDP TR-GENERAL 01-3010-72515
TR-CHNDI TR-GENERAL 01-3010-72515
TR-CHNDI TR-GENERAL 01-3010-72515
TR-CHNDP TR-GENERAL 01-3010-72515
TR-FENI TR-GENERAL 01-3010-72515
select a.craft,a.contractnum,a.controlaccount,b.mxrcontrolaccount
from maximo.laborcraftrate a
left join maximo.contract b on a.contractnum = b.contractnum
where a.contractnum is not null
【问题讨论】:
-
你可以做"(SELECT MAX(c.mxrcontrolaccount)"。但问题是:如果有不同的值你想要什么?
-
为什么是
WHERE c.contractnum = c.CONTRACTNUM?也许WHERE c.contractnum = lcr.CONTRACTNUM -
我不明白怎么会有多个值,因为每个laborcraftrate只有一个合同,但一个合同可以有多个laborcraftrate,所以我担心使用max会给出不正确的结果
-
@Tatiana - 这是问题中的错字,我已编辑,但问题是一样的
-
运行
select contractnum, count(*) from maximo.contract group by contractnum having count(*) > 1,这将为您提供在子查询中可能返回多于一行的行。然后你必须弄清楚你的数据或查询是否有问题。
标签: sql oracle sql-update