我有两个表-播放列表和歌曲。
我想从冷静的播放列表中选择与混合播放列表中的任何歌曲都具有相同风格的歌曲。
预期结果是:
song_id list_id title author genre duration
112 02 rock
我来到了这个解决方案:
SELECT * FROM songs, playlist
WHERE ID.playlist = list_id.songs
AND playlist.name = "chill"
AND songs.genre IN
(SELECT songs.genre FROM songs, playlist
WHERE ID.playlist = list_id.songs AND playlist.name = "mix");
但是不幸的是,对于本考试,我不允许在SELECT中同时合并JOIN和SELECT。所以我被困在这里。
这是桌子。
播放列表:
ID name admin
01 mix mark
02 chill dave
03 new anne
歌曲:
song_id list_id title author genre duration
111 01 pop
112 02 rock
113 01 rock
114 03 pop
115 02 indie
答案 0 :(得分:0)
我想不出一种完全消除您拥有的子查询的方法。一种选择是使用EXISTS
子句代替子查询:
SELECT *
FROM songs s
INNER JOIN playlist p
ON s.list_id = p.ID
WHERE
p.name = 'chill' AND
EXISTS (SELECT 1 FROM songs s2 WHERE s.genre = s2.genre AND p.name = 'mix');
这不能消除“ SELECT中的SELECT”,但这是编写查询的好方法。