我有一个表,其列如下:membership_id | user_id | group_id
我正在寻找一个SQL查询以获取2个不同用户之间的公共组数。我可以在几个查询中并使用一些PHP来做到这一点,但我想知道是否有一种方法可以仅使用SQL。
与用户ID 1和3一样,共有3个公共组(1、5和6),因此返回的结果为3。
我已经进行了几次测试,但到目前为止没有结果...谢谢。
最佳答案
您不需要“多个WHERE子句”,甚至不需要自我JOIN:
SELECT group_id
FROM theTable AS t
WHERE t.user_id IN (1, 3)
GROUP BY group_id
HAVING COUNT(DISTINCT user_id) = 2;
更一般地
SELECT group_id
FROM theTable AS t
WHERE t.user_id IN ([user id list])
GROUP BY group_id
HAVING COUNT(DISTINCT user_id) = [# of user ids in list];
编辑:哦,你想要组的数量。
SELECT COUNT(1) FROM (
SELECT group_id
FROM theTable AS t
WHERE t.user_id IN (1, 3)
GROUP BY group_id
HAVING COUNT(DISTINCT user_id) = 2
);
关于mysql - 使用几个WHERE子句的SQL常见匹配数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41574872/