sql - 如何选择在某列中具有多个相同值的所有不同行
问题描述
我有表-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 有关
解决方案
这是一个带聚合的自连接:
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;
这将返回与自身匹配的电影(具有两个类别)。我会让你过滤掉。此外,电影对出现两次——在任一方向。
推荐阅读
- jquery - 使用 Ajax / Jquery 和 JSON API 加载图像
- c# - 如何使用多个类修复 Json 中的反序列化
- vue.js - 如何让 replaceData 函数工作?
- c# - 有没有办法用 c# 读取像 [Owner="Tester"] 这样的测试属性值
- python - 如何让我的 vscode 终端将我的 venv 用于 python 而不是系统版本?
- python - 使用 Micropython 设置 esp32 接入点 Web 服务器
- html - 从 HTML 创建 PDF 并设置页面大小和边距
- android - 由于 livedata 的变化,如何更改 recyclerview 行的格式?
- javascript - 如何正确显示几个带有地图功能的 Flatlist?
- java - AlarmManager 的“setExact”方法行为不正确