2016-03-15 73 views
0

請幫我提供一個解決方案來獲取缺失值Oracle查詢來獲取表中的缺失值

表:學生

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') 

但它並沒有像我預期的那樣抓取記錄。欣賞是否有人能提供解決方案。

+2

Stud_ID是什麼意思?爲什麼每個學生都有很多名字? –

+0

但是爲什麼你的頭銜向我們大喊? – Mureinik

回答

2

您也可以嘗試下面的一個

SELECT stud_Name 
FROM STUDENT 
WHERE stud_id NOT IN (SELECT stud_id FROM STUDENT WHERE subject='PHYSICS'); 
+0

上面的查詢仍然會獲取stud_id S001和S002,我不想要這個,因爲S001和S002有物理記錄 – Rams

+0

好吧。看到我編輯的查詢。 – FallAndLearn

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')) 
+0

謝謝大家的建議 – Rams

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;