首页 > 解决方案 > 单行子查询返回多于一行 - 当查询应返回 1 行时

问题描述

我期望来自下面的查询的单个结果对象具有以下输入。

但我收到此错误:

ORA-01427: 单行子查询返回多于一行
01427. 00000 - “单行子查询返回多于一行”

数据为:

    id  ssn     Name    Branch  City    DepntSsn  
   ----------------------------------------------
    01  100     AAA     IT      CA      101         
    02  101     BBB     RA      VA      104 
    03  101     BBB     RA      VA      104     

甲骨文查询:

SELECT
    id,
    ssn,
    name,
    branch,
    city,
    depntssn,
    CASE WHEN branch == 'IT' then (select id from case where ssn = DepntSsn) else null end DepntId 
FROM
    case
WHERE
    ssn = 100   
     )
WHERE
    ROWNUM = 1
     ;

输出应该是:

id  ssn     Name    Branch  City    DepntSsn  DepntId
-----------------------------------------------------
01  100     AAA     IT      CA      101         02

标签: sqloracleoracle-sqldeveloper

解决方案


错误似乎很明显。这个子查询:

(select id from case where ssn = DepntSsn)

返回多于一行。好吧,原因可能与这是同一张表有关,所以这确实是:

(select c2.id from case c2 where c2.ssn = c2.DepntSsn)

这当然不是你想要的。我怀疑你想要这样的东西:

select . . .,
       (select c2.id from case c2 where c2.ssn = c.DepntSsn)
from case c
. . .

当您的查询有多个表引用时,您应该始终限定所有列引用。这对于相关子查询尤为重要!

此外,case它是一个糟糕的表名称,因为它是一个 SQL 关键字。


推荐阅读