请帮我提供一个获取缺失值的解决方案
表:学生
Stud_ID Stud_Name Subject
S001 Peter Mathematics
S001 Garry Physics
S001 Mike English
S002 JOhn Physics
S002 Nike English
S003 Jim Mathematics
S004 Kerry English
s004 Michel Mathematics
我需要编写一个oracle查询来获取学生姓名,但他没有这个主题" Physics"
我尝试过查询
SELECT *
FROM STUDENT
WHERE SUBJECT NOT IN('Physics')
但它并没有像我预期的那样获取记录。感谢是否有人能提供解决方案。
答案 0 :(得分:2)
您也可以尝试以下
SELECT stud_Name
FROM STUDENT
WHERE stud_id NOT IN (SELECT stud_id FROM STUDENT WHERE subject='PHYSICS');
答案 1 :(得分:0)
SELECT stud_id FROM student WHERE subject IN ('Physics')
会给你带有物理学的学生。你不想要他们。所以:
select *
from students
where stud_id not in (SELECT stud_id FROM student WHERE subject IN ('Physics'))
答案 2 :(得分:0)
您可以在没有相关子查询的情况下(在单个表扫描中)执行此操作:
SELECT stud_id
FROM student
GROUP BY stud_id
HAVING COUNT( CASE WHEN subject = 'Physics' THEN 1 END ) = 0;
如果你想获得名单,那么你可以这样做:
SELECT stud_id,
LISTAGG( stud_name, ',' ) WITHIN GROUP ( ORDER BY stud_name ) AS stud_names
FROM student
GROUP BY stud_id
HAVING COUNT( CASE WHEN subject = 'Physics' THEN 1 END ) = 0;