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