我有一个名称和大学课程的表格,每个课程都注册为表格中的不同条目
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应该给予注册,因为他们注册了两种课程。
答案 0 :(得分:1)
使用OR
代替AND
:
SELECT *
FROM Table
WHERE Course = 'Bio' OR Course = 'Maths'
GROUP BY Name;
AND
返回记录,其中包含课程=' Bio' 和'数学' (它不会在同一时间发生)。
SQL Fiddle中的示例。
如果您正在寻找两门课程的学生:
SELECT *
FROM TableName
WHERE Course = 'Bio' OR Course = 'Maths'
GROUP BY Name
HAVING COUNT(*)=2
SQL Fiddle中的示例。
答案 1 :(得分:0)
您可以使用IN子句:
SELECT * FROM Table WHERE Course IN ('Bio', 'Maths') GROUP BY Name;
它检查列值是否与呈现列表中的列值相对应。
答案 2 :(得分:0)
SELECT * FROM Table WHERE Course IN('Bio', 'Maths') GROUP BY Name;
请试试。
答案 3 :(得分:0)
这取决于您的意思,您是在寻找注册了数学和生物学的学生,还是在其中任何一个注册的学生?
- 学生在数学和生物方面注册
select NAME
from T
where Course IN('Bio', 'Maths')
group by NAME
having count( distinct COURSE ) = 2
答案 4 :(得分:0)
您应该使用GROUP BY
但HAVING COUNT(*)=2
条件,因此在这种情况下,您可以选择为这两个班级注册的学生:
SELECT Name
FROM Table
WHERE Course = 'Bio' or Course = 'Maths'
GROUP BY Name
HAVING COUNT(*)=2