首页 > 解决方案 > MySQL 查询:仅返回参与所有事件的用户的用户 ID

问题描述

哪个用户参加了哪个活动的表格:

+---------+-------+
| user_id | event |
+---------+-------+
| 1       | 1     |
+---------+-------+
| 1       | 2     |
+---------+-------+
| 2       | 1     |
+---------+-------+

我正在寻找一个只返回参与所有事件的用户的用户 ID 的查询。所以上面示例表的查询应该只返回用户 id 1,因为用户 2 错过了事件 2。

标签: mysqlsql

解决方案


您可以使用聚合和having子句。如果您没有单独的事件表,则可以使用此表中的所有事件:

select user_id
from t
group by user_id
having count(*) = (select count(distinct event) from t);

这假设用户不会多次参与同一事件,这似乎是一个合理的假设。


推荐阅读