SQL加带有where子句的内部联接(多个条件)

时间:2019-01-03 13:21:37

标签: sqlplus

我有两个表-播放列表和歌曲。
我想从冷静的播放列表中选择与混合播放列表中的任何歌曲都具有相同风格的歌曲。
预期结果是:

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

1 个答案:

答案 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”,但这是编写查询的好方法。