2015-03-31 82 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)