StudentID | SubCode | SubName
-------------------------------
1 1 Math
1 2 Science
1 3 English
2 1 Math
2 2 Science
3 2 Science
4 1 Math
4 3 English
这是我的主题表。
如何找到已注册的学生
在单个SQL查询中。
我试过这种方式
SELECT DISTINCT
`stud_id` FROM `subj_assign`
WHERE
`subj_id` = '1,2'
AND STATUS = '1'
ORDER BY
`subj_assign`.`stud_id` ASC
AND也尝试这种方式但不工作
SELECT stud_id FROM subj_assign GROUP BY stud_id
HAVING Count(CASE WHEN subj_id = '1' AND
status='1' THEN 1 END) = 1 AND
Count(CASE WHEN `subj_id` = '2' AND
status='1' THEN 1 END) = 1
答案 0 :(得分:2)
SELECT stud_id FROM subj_assign GROUP BY stud_id
HAVING Count(CASE WHEN subj_id = '1' AND
status='1' THEN 1 END) = 1 AND
Count(CASE WHEN `subj_id` = '2' AND
status='1' THEN 1 END) = 1
然后与学生的总科目和有条件的过滤科目进行比较
答案 1 :(得分:0)
试试这个: -
SELECT
(SELECT DISTINCT StudentID FROM subject WHERE SubName = 'Math' AND StudentID NOT IN ( SELECT DISTINCT StudentID FROM subject WHERE SubName IN ('English', 'Science')) AS STUD_ONLY_IN_MATHS,
(SELECT DISTINCT StudentID FROM subject WHERE SubName in ('Math', 'English') AND StudentID NOT IN ( SELECT DISTINCT StudentID FROM subject WHERE SubName IN ('Science')) AS STUD_IN_MATHS_AND_ENGLISH,
(SELECT DISTINCT StudentID FROM subject WHERE SubName in ('Math', 'English', 'Science') AS STUD_IN_MATHS_ENGLISH_SCIENCE);
答案 2 :(得分:0)
您可以将表格与StudentID分组的表格连接起来。这样你就可以同时测试行数和子代码。
SELECT DISTINCT tmp.StudentID
FROM subj_assign tmp JOIN (SELECT StudentID, COUNT(*) as total
FROM subj_assign
GROUP BY StudentID) tmpG on tmp.StudentID = tmpG.StudentID
WHERE (tmp.SubCode = 1 and total = 1) --Only Math
OR (total = 2 and SubCode != 2) --No Science
OR total = 3 --Math, English, Science