用户参与事件表:
+---------+-------+
| user_id | event |
+---------+-------+
| 1 | 1 |
+---------+-------+
| 1 | 2 |
+---------+-------+
| 2 | 1 |
+---------+-------+
我正在寻找一个查询,只返回参与所有事件的用户的用户id。因此,上面示例表的查询应该只返回用户id 1,因为用户2错过了事件2。
可以使用聚合和having
子句。如果没有单独的事件表,可以使用该表中的所有事件:
select user_id
from t
group by user_id
having count(*) = (select count(distinct event) from t);
假设用户不会多次参与同一事件,这似乎是一个合理的假设。