2014-05-14 38 views
1

我有名字和大學課程表,每個註冊課程是在表中的不同的入口SQL 1和表2項選擇

NAME  COURSE 
StudA  Bio 
StudA  Maths 
StudB  Maths 
StudC  Bio 
StudC  Maths 

我如何選擇兩個生物和註冊的所有學生數學?我試過了

SELECT * FROM Table WHERE Course = 'Bio' And Course = 'Maths' GROUP BY Name; 

但我沒有得到任何結果。

我需要兩個結果給同一個學生。即只有StudA和B應爲他們註冊BOTH課程。

回答

0

這取決於你的意思,你是否在尋找既註冊數學又註冊生物的學生,或者是在其中任何一個註冊的學生?

- 在數學和生物註冊學生

select NAME 
from T 
where Course IN('Bio', 'Maths') 
group by NAME 
having count(distinct COURSE) = 2 
1

使用OR而不是AND

SELECT * 
FROM Table 
WHERE Course = 'Bio' OR Course = 'Maths' 
GROUP BY Name; 

AND與課程= '生物' '數學'(不會在同一時間發生)返回記錄。

SQL Fiddle中的示例。

如果您正在尋找誰出現兩種課程的學生:

SELECT * 
FROM TableName 
WHERE Course = 'Bio' OR Course = 'Maths' 
GROUP BY Name 
HAVING COUNT(*)=2 

實例SQL Fiddle

+1

我不是downvoter,但你不覺得它也取得了一個記錄沒有任何一門課程。 –

+0

@Ravinder:是的,但只有當那個學生出現在'生物'或'數學'時。如果他出現的課程不屬於這些課程,則不會提取。見[**這**](http://www.sqlfiddle.com/#!2/e34bd/2)。 –

0

可以使用IN子句:

SELECT * FROM Table WHERE Course IN ('Bio', 'Maths') GROUP BY Name; 

它檢查列值是否對應於一個所呈現的列表中。

0
SELECT * FROM Table WHERE Course IN('Bio', 'Maths') GROUP BY Name; 

請嘗試此操作。

0

你應該因此在這種情況下,選擇這兩個類註冊學生使用GROUP BYHAVING COUNT(*)=2條件:

SELECT Name 
FROM Table 
WHERE Course = 'Bio' or Course = 'Maths' 
GROUP BY Name 
HAVING COUNT(*)=2 

SQLFiddle demo