SQL错误:ORA-00913:值太多00913. 00000 - “太多值”

时间:2014-05-19 13:11:38

标签: sql oracle

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开发人员不断弹出这个错误,任何人都可以帮助我吗?非常感谢

2 个答案:

答案 0 :(得分:3)

问题是子查询中的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;

答案 1 :(得分:0)

正如其他人所指出的,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