SELECT user_id
FROM student_enrollment se1
WHERE course_id = 10 AND due_fee = 0 AND
NOT EXISTS (
SELECT 1
FROM student_enrollment se2
WHERE se2.user_id = se1.user_id AND
se2.course_id <> 10
);
字符串 另一种方法,使用聚合:
SELECT user_id
FROM student_enrollment
WHERE due_fee = 0
GROUP BY user_id
HAVING SUM(course_id <> 10) = 0;
SELECT user_id
FROM
(
SELECT user_id,
count(case when course_id = 10 then 1 else 0 end) cnt_10,
count(case when course_id <> 10 then 1 else 0 end) cnt_other
FROM student_enrollment s
GROUP BY user_id
) s
WHERE cnt_10>0 and cnt_other=0
字符串 或
SELECT user_id
FROM student_enrollment s
GROUP BY user_id
HAVING count(case when course_id = 10 then 1 else 0 end)>0
AND count(case when course_id <> 10 then 1 else 0 end)=0
3条答案
按热度按时间sgtfey8w1#
你可以使用exists逻辑来表达这一点:
字符串
另一种方法,使用聚合:
型
7cjasjjr2#
一个简单的方法是使用
EXCEPT
:查找所有参加课程#10的用户,除了那些还参加另一个课程的用户。字符串
https://dev.mysql.com/doc/refman/8.0/en/except.html
gev0vcfq3#
使用条件聚合和筛选:
字符串
或
型