我有一个Oracle SQL查询抛出错误:
ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:
我该怎么做才能避免此错误?如何确定此错误的原因/来源?
这是SQL查询:
select (select CID
from SPL A
where A.prodid = appl.prod_id
and A.STATUS = 'SET'
and A.DT = (select min(DT) from SPL B where A.prodid = B.prodid))
as CIDORIG
from prod_master appl
where prod_status = 'OFF';
但是,我无法在我的SQL语句中找到这样的子查询。 MIN()只返回一个结果。我也尝试用关键字IN替换'='符号,但没有任何运气。此查询适用于其他prod_status值。
在抛出错误之前,它从我们期望的15,648行中获取了13,700行。我期待15,648行,因为SQL Developer配置为一次只返回50行。当我选择“Count Rows”选项时,它会给出数字15,648。
SPL和prod_master都是观点。
答案 0 :(得分:3)
据推测,返回多行的子查询是:
(select CID
from SPL A
where A.prodid = appl.prod_id
and A.STATUS = 'SET'
and A.DT = (select min(DT) from SPL B where A.prodid = B.prodid)
) as CIDORIG
要解决此问题,请尝试选择min(CID)
或max(CID)
。
答案 1 :(得分:0)
仅当您确定子查询将返回1行或0行时才使用标量子查询,否则您将最终出现此错误。
您可以在不使用标量子查询的情况下为您编写查询,如下所示
select a.CID
from prod_master appl
join SPL A
on ( A.prodid = appl.prod_id)
where appl.prod_status = 'OFF'
and A.STATUS = 'SET'
and A.DT = (select min(b.DT)
from SPL B
where A.prodid = B.prodid);