mysql - 关于对删除重复项的 Sql 查询
问题描述
So I have to do a query where I am asked to find the count of directors who, for every pair of movies' genres, have directed both. I thought I should take two instances of genre id and two instances of directors id and find those where g_id's are different but dir_id are the same,so I tried something like this
select distinct g1.genre_id as genre1,
g2.genre_id as genre2,
count(distinct mhd1.director_id) as directors_count
from genre g1, genre g2, movie_has_genre mhg1,movie_has_genre
mhg2,movie_has_director mhd1,movie_has_director mhd2
where
(g2.genre_id <> g1.genre_id) and (mhg1.genre_id = g1.genre_id)
and (mhg2.genre_id = g2.genre_id) and (mhd1.movie_id = mhg1.movie_id)
and (mhd2.movie_id = mhg2.movie_id) and (mhd1.director_id =mhd2.director_id)
group by g1.genre_id, g2.genre_id;
Base is
actor(actor_id,first_name,last_name,gender)
director(director_id,first_name,last_name)
role(movie_id,actor_id,role)
genre(genre_id,name)
movie(movie_id,title,year,rank)
movie_has_director(movie_id,director_id)
movie_has_genre(genre_id,movie_id)
but it is not working. What am I missing there? Thank you
EDIT problem seems to be I get both (a,b) and (b,a) pairs while I should get only (a,b) with a
解决方案
首先,您需要一种交叉连接来获得两种类型的所有组合:genre g1 join genre g2 on g2.id > g1.id
. 然后,您需要同时加入(movie_has_genre
和) ,并且只保留导演相同的行 ( )。其余的是基本的,并且:movie_has_director
g1
g2
md2.director_id = md1.director_id
GROUP BY
COUNT
select g1.name as genre1,
g2.name as genre2,
count(distinct md1.director_id) as directors_count
from genre g1
join genre g2 on g2.id > g1.id
join movie_has_genre mg1 on mg1.genre_id = g1.id
join movie_has_genre mg2 on mg2.genre_id = g2.id
join movie_has_director md1 on md1.movie_id = mg1.movie_id
join movie_has_director md2 on md2.movie_id = mg2.movie_id
and md2.director_id = md1.director_id
group by g1.id, g2.id
推荐阅读
- discord - 使用 Distube 包拉取哪个频道发布歌曲时出错
- python - PyQt5 Signal 不会连接
- java - 以编程方式从 android 应用程序向 Facebook Messenger 发送消息
- kubernetes - 如何在 PyCharm 中关闭文件 cluster.yml 的特殊模式验证?
- reactjs - 为什么`create-react-app` 需要`jsconfig.json` 进行绝对导入,而Webpack 不需要?
- mysql - Unix 设备上的默认 lower_case_table_names 系统变量值
- javascript - 如何在动态创建的元素上触发事件?
- c# - 如何在硒 c# 中将 Blob 图像转换为位图图像
- javascript - 生成表格的问题 - Angular 12 - 即使没有 css,这里也会应用颜色和形状
- python - 每当我尝试使用命令 pip install ChatterBot 安装 ChatterBot 时,都会遇到以下错误: