用于获取表中缺少的值的Oracle查询
请帮助我提供一个解决方案来获取丢失的值 表:学生用于获取表中缺少的值的Oracle查询,oracle,oracle11g,Oracle,Oracle11g,请帮助我提供一个解决方案来获取丢失的值 表:学生 Stud_ID Stud_Name Subject S001 Peter Mathematics S001 Garry Physics S001 Mike English S002 JOhn Physics S002 Nike English S003 Jim Mat
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查询来获取学生的名字,他没有“物理”科目
我试着问了一个问题
SELECT *
FROM STUDENT
WHERE SUBJECT NOT IN('Physics')
但是它没有像我预期的那样获取记录。如果有人能提供解决方案,我们将不胜感激。您也可以尝试下面的解决方案
SELECT stud_Name
FROM STUDENT
WHERE stud_id NOT IN (SELECT stud_id FROM STUDENT WHERE subject='PHYSICS');
你也可以试试下面的一个
SELECT stud_Name
FROM STUDENT
WHERE stud_id NOT IN (SELECT stud_id FROM STUDENT WHERE subject='PHYSICS');
会给你一个有物理的学生。你不想要他们。因此:
select *
from students
where stud_id not in (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'))
您可以在不使用相关子查询的情况下执行此操作(在单个表扫描中): 如果要获取姓名列表,可以执行以下操作:
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;
您可以在不使用相关子查询的情况下执行此操作(在单个表扫描中): 如果要获取姓名列表,可以执行以下操作:
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;
上面的查询仍然会获取stud_id S001和S002,我不想要这个,因为S001和S002有物理记录上面的查询仍然会获取stud_id S001和S002,我不想要这个,因为S001和S002有物理记录stud_id是什么意思?为什么每个学生都可以有很多名字?但是为什么你的名字对我们大喊大叫?Stud_ID是什么意思?为什么每个学生都有很多名字?但是为什么你的名字对我们大喊大叫呢?谢谢大家的建议谢谢大家的建议