ORA-01427: 单行子查询返回多行更新
Posted
技术标签:
【中文标题】ORA-01427: 单行子查询返回多行更新【英文标题】:ORA-01427: single-row subquery returns more than one row with update 【发布时间】:2018-08-27 15:24:11 【问题描述】:我有一个更新语句,起初它处理了一些数据,但过了一段时间我遇到了一些 regiters 问题,我收到以下错误: ORA-01427:单行子查询返回多行。我以为是 IN,因为查询可能会返回重复的 ID,所以我放了一个 DISTINCT 但我一直收到同样的错误,有人知道它可能是什么吗?
下面的查询:
UPDATE
TABLE_DETAIL DET
SET
DET.ACCEPTED=?,
DET.VALUE_ACCEPTED=(SELECT RES.VALUE FROM TABLE_RES RES WHERE RES.MYT=DET.MYT AND RES.RAD=DET.RAD AND RES.ITEM=DET.ITEM),
WHERE
DET.ID
IN (
SELECT
DISTINCT DET_I.ID
FROM TABLE_DETAIL DET_I, TABLE_RES RES_I, TABLE_REC REC
WHERE
DET_I.MYT = ?
AND
REC.TEMP
NOT IN (
SELECT DISTINCT TEMP
FROM
TABLE_IMAGES WHERE CODE=?)
AND RES_I.USER = ?
)
【问题讨论】:
是DET.VALUE_ACCEPTED=(SELECT RES.VALUE FROM...
子查询引起了麻烦。
【参考方案1】:
你不需要SELECT DISTINCT
和IN
。
您的问题的近端原因是这段代码:
DET.VALUE_ACCEPTED = (SELECT RES.VALUE FROM TABLE_RES RES WHERE RES.MYT=DET.MYT AND RES.RAD=DET.RAD AND RES.ITEM=DET.ITEM),
真的不能说如何解决它。错误代码似乎很清楚:此查询返回多行。
如果你想要一个任意值,你可以添加WHERE rownum = 1
。或者SELECT
中的聚合函数。
【讨论】:
我检查了这个,我使用实际值查询了选择,我只得到一行,我输入 DISTINCT 的 IN 返回两个值,然后我用它来查询更新中的选择而且只有一排 @Alex 。 . .将and rownum = 1
添加到子查询中,看看问题是否消失。以上是关于ORA-01427: 单行子查询返回多行更新的主要内容,如果未能解决你的问题,请参考以下文章
ORA-01427: 单行子查询在使用 GUID(sys_Guid()) 设置父子关系时返回多行