如何构造比较 M:N 关系中的两个集合的查询?

How to construct query which compares two sets in M:N relationship?

我有两个(三个-第三个是绑定 table)tables 用户和功能。他们是多对多的关系。我想构建查询以查找与特定用户具有相似功能的所有用户。

我知道通常我可以使用这样的东西:

select user from User user 
inner join user.feature feature
where feature in :features

但这只适用于我只寻找一项特定功能的情况。有没有办法通过比较 SQL 中的 "two sets" "features in features" 来做到这一点?还是必须在业务层做?

您可以为此使用 SQL。如果我理解,您想根据其他用户与给定用户有多少共同特征来对其他用户进行排名。

select uf.user, count(*) as FeaturesInCommon
from user_features uf join
     user_features uf2
     on uf.feature = uf2.feature
where uf2.user = $user
group by uf.user
order by FeaturesInCommon desc;