2015-03-31 78 views
1

我正在創建學生記錄搜索查詢。學校有三個俱樂部(數學,英語和科學)。我想要做的是按照他們加入的俱樂部的順序選擇學生。 學生誰在 - 數學只有 - 數學和英語只 - 數學和科學只有 - 只有英文 - 英語和科學只有 - 科學只有使用AND和OR在WHERE子句中進行MySQL查詢

Student table (studentTB) 

id | student_name | date_join 
----------------------------- 
1 | Daniel Addo | 2012-01-05 
2 |David Polles | 2013-05-11 
3 | Grace Amorno | --------- 
4 | Zein Akill | --------- 

Club table (studentCLUB) 

id | studentID | club 
---------------------- 
1 | 1   | maths 
2 | 1   | science 
3 | 2   | science 
4 | 2   | english 
5 | 3   | science 
6 | 4   | maths 
7 | 4   | science 
8 | 4   | english 


SELECT * 
    FROM studentTB 
    INNER JOIN studentCLUB 
    ON studentTB.id = studentCLUB.studentID 
    WHERE (club = 'maths') OR (club = 'science') OR (day = 'english') 
    GROUP BY studentTB.id 

這是到目前爲止,我選擇的是當他們屬於俱樂部之一的學生。但是,當我更改OR以及它給了我空。 如果有人能幫助我,我會很高興。謝謝

+0

告訴我們,你嘗試使用,並更好地瞭解您的問題 – Shaeldon 2015-03-31 08:23:21

+0

的所以你可能有多個俱樂部相關的學生額外的查詢? – 2015-03-31 08:24:55

+0

是的。學生可以加入多個俱樂部 – 2015-03-31 08:25:33

回答

0

因此,你需要找到屬於你所有給定俱樂部的學生,你可以做如下。它將檢查擁有所有3個俱樂部的學生。

SELECT * 
FROM studentTB 
INNER JOIN studentCLUB 
ON studentTB.id = studentCLUB.studentID 
WHERE 
club in ('maths','science','english') 
GROUP BY studentTB.id 
having count(*) = 3 
+0

謝謝,我不是在所有三個俱樂部尋找學生。我想要所有俱樂部中的學生都被選中 - 它可以是數學專業,也可以是數學和科學專業,或者只有數學和英語專業,或者全部三門專業。 – 2015-03-31 08:37:14

+0

對,我想你的俱樂部是用戶輸入的,你可以修改上面的查詢,通過鏈接條目中的條目數然後有一部分。例如,如果你說搜索'僅數學和科學',那麼'in'子句將是'('數學','科學')中的俱樂部,並且最後'計數(*)= 2' – 2015-03-31 08:40:36

0
SELECT * FROM studentTB 
WHERE EXISTS(SELECT * FROM studentCLUB 
WHERE studentTB.id = studentCLUB.studentID)