我有一个资格记录表,我需要能够搜索它,只显示包含所有课程代码AB、CB和DE的user_id。我尝试过groupby、count(*(和have,但无论我如何安排,我仍然没有得到想要的结果。
record_id user_id course_code
------------------------------------------------
1 1000 AB
2 1000 CB
3 1000 DE
4 1001 AB
5 1002 AB
6 1003 AB
7 1004 AB
8 1005 AB
9 1005 CB
10 1005 DE
运行我试图实现的查询应该只返回user_id的1000和1005。
为了增加额外的复杂性,这个要搜索的资格列表将由PHP脚本根据一些用户输入动态生成。因此,在某些情况下可能包括10个course_code值,而在其他情况下仅包括1。
您可以使用聚合,并使用having
子句进行筛选:
select user_id
from mytable
where course_code in ('AB', 'CB', 'DE')
group by user_id
having count(*) = 3
这假设(user_id, course_code)
元组在表中是唯一的,否则您需要将having
子句更改为:
having count(distinct course_code) = 3
您可以很容易地更改where
和having
子句以处理更多的course_code
s。