Sql плюс внутреннее соединение с предложением where (несколько условий) - PullRequest
0 голосов
/ 03 января 2019

У меня есть две таблицы - плейлист и песни.
Я хочу выбрать песни из холодного плейлиста того же жанра, что и любую песню из микс плейлиста.
Ожидаемый результат:

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");

Но, к сожалению, для этого экзамена мне не разрешено объединять JOIN и SELECT в 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 голосов
/ 03 января 2019

Я не могу придумать, как полностью исключить ваш подзапрос. Одним из вариантов будет использование предложения 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');

Это не исключает «ВЫБОР в ВЫБОР», но это хороший способ написать ваш запрос.

...