在行中搜索用户 ID(如果 具有列列表中指定的所有值)



我有一个资格记录表,我需要能够搜索它,只显示包含所有课程代码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

您可以很容易地更改wherehaving子句以处理更多的course_codes。

最新更新