Sql 查找所有重复组,其中“重复”表示包含相同成员的组
我需要一个SQL查询来查找所有重复的组。所谓重复,我指的是任何拥有相同成员的组。因此,正式地说,问题可以写出来:返回所有通道ID集合,其中在包含m个通道的给定集合中:通道i到m包含相同的成员。我有一个包含列group\U id、user\U id的join表groups\U members,以及一个users表和一个groups表。谢谢你的帮助 您需要使用WHERE IN子句,然后在子查询中使用GROUP BY和HAVING子句,您可以说类似于HAVING COUNT*>1的语句来查找重复项。谢谢。我终于明白了Sql 查找所有重复组,其中“重复”表示包含相同成员的组,sql,postgresql,bookshelf.js,knex.js,Sql,Postgresql,Bookshelf.js,Knex.js,我需要一个SQL查询来查找所有重复的组。所谓重复,我指的是任何拥有相同成员的组。因此,正式地说,问题可以写出来:返回所有通道ID集合,其中在包含m个通道的给定集合中:通道i到m包含相同的成员。我有一个包含列group\U id、user\U id的join表groups\U members,以及一个users表和一个groups表。谢谢你的帮助 您需要使用WHERE IN子句,然后在子查询中使用GROUP BY和HAVING子句,您可以说类似于HAVING COUNT*>1的语句来查找重复项。谢
选择array\u aggDISTINCT a.channel\u id作为频道,a.members from select channel\u id,array\u agguser\u id作为成员从users\u channels group by channel\u id a加入选择channel\u id,array\u agguser\u id作为成员从users\u channels group by channel\u id b ON a.members=b和a.channel\u id b.channel\u id组by a.members 您可以使用完全联接并查看是否有任何用户id为null,这意味着有一个用户在一个组中,而不是在另一个组中
select gm1.id, gm2.id from group_members gm1
full join group_members gm2 on gm2.user_id = gm1.user_id
where gm1.id < gm2.id
group by gm1.id, gm2.id
having count(case when gm1.user_id is null
or gm2.user_id is null then 1 end) = 0
哈哈,不,这不是家庭作业。形式只是b/c,通过正式的问题陈述可以清楚地理解。
select g.* from groups g1
join groups g2 on g2.id < g1.id
where not exists (
select 1 from group_members gm1
left join group_members gm2 on gm1.user_id = gm2.user_id and gm2.id = g2.id
where gm1.group_id = g1.id
and gm2.user_id is null
) and not exists (
select 1 from group_members gm1
left join group_members gm2 on gm1.user_id = gm2.user_id and gm2.id = g1.id
where gm1.group_id = g2.id
and gm2.user_id is null
)