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 DISTINCTIN

您的问题的近端原因是这段代码:

    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: 单行子查询在显示输出时返回多行

ORA-01427:单行子查询返回多行 - 如何修复?

ORA-01427:单行子查询返回多个行

ORA-01427: 单行子查询在使用 GUID(sys_Guid()) 设置父子关系时返回多行

ORA-01427: 单行子查询返回多于一行 ,,WHEN USING SELECT COUNT

错误(单行子查询返回多行)