首页 > 解决方案 > 如何选择在某列中具有多个相同值的所有不同行

问题描述

我有表-MovieCategoty,其中包含movieId 和categoryId 作为列,我需要获取与另一个movieId 相关的所有movieId。相关手段 - 如果它们至少有两个共同的 CategoryID。(查询应该用 MS SQL 服务器编写)。我尝试了几种方法,但没有得到正确的结果。

该表是 MovieCategoty

电影ID 类别 ID
1 4
2 6
2 4
3 1
3 3
3 6
4 1
4 3
5 1
5 2
5 3

例如,我的查询需要显示 movieId 3,4,因为它们都与 1,3 CategoryId 有关

标签: sqlsql-serverdatabase

解决方案


这是一个带聚合的自连接:

select mc1.movieid, mc2.movieid, count(*) as num_categories
from movieCategory mc1 join
     movieCategory mc2
     on mc1.categoryid = mc2.categoryid
group by mc1.movieid, mc2.movieid
having count(*) >= 2;

这将返回与自身匹配的电影(具有两个类别)。我会让你过滤掉。此外,电影对出现两次——在任一方向。


推荐阅读