SQL 错误:ORA-00913:值太多 00913.00000 -“值太多”
Posted
技术标签:
【中文标题】SQL 错误:ORA-00913:值太多 00913.00000 -“值太多”【英文标题】:SQL Error: ORA-00913: too many values 00913. 00000 - "too many values" 【发布时间】:2014-05-19 13:11:37 【问题描述】:select * from crew cr
where cr.crew_supervisor_id in
(select *
from crew c
where not exists
(select crew_supervisor_id
from crew cr
where c.crew_id = cr.crew_supervisor_id))
order by crew_id;
所以我试图从我制作的表中提取信息,而 sql developer 不断弹出这个错误,有人可以帮助我吗?非常感谢
【问题讨论】:
您应该在 IN 子查询中指定一个列名,而不仅仅是*
- 这意味着所有字段。我想应该是c.crew_id
?
是的,* 会导致语法错误。但是我想这不是你唯一的问题。查询实际上应该返回什么?
【参考方案1】:
问题是子查询中的select *
。与in
一起使用的子查询只能返回一个值。
select *
from crew cr
where cr.crew_supervisor_id in (select crew_id
from crew c
where not exists (select crew_supervisor_id
from crew cr
where c.crew_id = cr.crew_supervisor_id
)
)
order by crew_id;
【讨论】:
语法正确。然而,问“给我所有主管 ID 是现有船员 ID 但不是现有主管 ID 的记录”永远不会返回任何记录,对吧? @ThorstenKettner 。 . .我试图避免理解查询。我真的无法遵循嵌套的exists
/in
构造,让我的头爆炸。毫无疑问,还有其他方法可以做同样的事情。【参考方案2】:
正如其他人所指出的,IN 条件要求您在子查询中指定列名。请参考这个Oracle documentation。
以下查询将返回不是任何其他船员的主管的所有船员,没有任何错误。此外,JOIN 会执行得非常好。
SELECT
CREWS.*
FROM
(
SELECT * FROM CREW
)
CREWS
LEFT OUTER JOIN
(
SELECT DISTINCT CREW_SUPERVISOR_ID FROM CREW
)
SUPERVISORS
ON
CREWS.CREW_ID = SUPERVISORS.CREW_SUPERVISOR_ID
WHERE
SUPERVISORS.CREW_SUPERVISOR_ID IS NULL;
SQL Fiddle demo
【讨论】:
以上是关于SQL 错误:ORA-00913:值太多 00913.00000 -“值太多”的主要内容,如果未能解决你的问题,请参考以下文章