mysql – 规范化数据库 – ONE到MANY – 搜索所有已连接的数据集
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – 规范化数据库 – ONE到MANY – 搜索所有已连接的数据集,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1578字,纯文字阅读大概需要3分钟。
内容图文
![mysql – 规范化数据库 – ONE到MANY – 搜索所有已连接的数据集](/upload/InfoBanner/zyjiaocheng/892/39a4481d600242af8656a62b7b67916b.jpg)
我正在尝试构建一个MySQL查询,它允许我在具有流行和电子类型的数据库中拉出轨道的歌曲标题.
+----------------------------------------------------+
TABLE: SONG
+----------------------------------------------------+
song_id? | title ? |
1 | song name |
+----------------------------------------------------+
TABLE: GENRE
+----------------------------------------------------+
genre_id ? | name? |
1 | Pop | ? ?
2 | Electronic | ?
+----------------------------------------------------+
TABLE: SONG_GENRE
+----------------------------------------------------+
genre_id? | song_id |
1 | 1 |
2 | 1 |
这个SQL不起作用,因为它显然永远不会返回1和2的genre_id,但这是我被卡住的地方.
SELECT DISTINCT song.song_id, song.title
FROM song
LEFT JOIN song_genre ON song_genre.song_id = song.song_id
LEFT JOIN genre ON genre.genre_id = song_genre.genre_id
WHERE genre.genre_id ='1'
AND genre.genre_id='2'
如果有人能指出我正确的方向,我会非常感激!
解决方法:
这是一种方法:
SELECT DISTINCT song.song_id, song.title
FROM song
INNER JOIN (SELECT songid FROM song_genre WHERE song_genre.genre_id ='1') genre1
ON genre1.song_id = song.song_id
INNER JOIN (SELECT songid FROM song_genre WHERE song_genre.genre_id ='2') genre2
ON genre2.song_id = song.song_id
另一种可能更有效的方式.这假设song_genre中没有重复. COUNT(*)= X其中X等于列出的类型数.
SELECT DISTINCT song.song_id, song.title
FROM song
INNER JOIN (SELECT songid, COUNT(*) FROM song_genre
WHERE genre_id IN ('1','2')
GROUP BY songid HAVING COUNT(*) = 2) genre1 ON genre1.song_id = song.song_id
内容总结
以上是互联网集市为您收集整理的mysql – 规范化数据库 – ONE到MANY – 搜索所有已连接的数据集全部内容,希望文章能够帮你解决mysql – 规范化数据库 – ONE到MANY – 搜索所有已连接的数据集所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。