sql - 单行子查询返回多于一行 - 当查询应返回 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
解决方案
错误似乎很明显。这个子查询:
(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 关键字。
推荐阅读
- scala - scala play-json 中动态 json 的读取器和写入器
- hpc - 使用 condor 时如何从环境变量中获取交互式作业的作业 ID?
- javascript - 在定义函数时访问实例的属性
- swift - 数组的内部过滤不会快速过滤
- database-restore - 恢复外部硬盘驱动器上的数据库
- django - 根据另一个字段设置 Django 字段默认值
- sql - 如何在 SQL 中获取最近日期之间的天数?
- python - 如何在一个 div 中抓取多个样式?
- python - 尝试保存文本时出现 tclError
- postgresql - 我有一个卷挂载到 Kubernetes pod 中,该卷有 644 权限,但容器用户是非 root 用户,我可以强制挂载为 777 吗?