我在MySQL数据库中设置了歌曲。
每首歌曲分配多个位置或根本没有位置。
只应从数据库中提取未在数据库中指定位置或将位置指定给下面指定位置的歌曲。
希望当您理解我的查询时,它会有意义
SELECT s.* FROM roster_songs AS s
LEFT JOIN roster_songs_locations AS sl ON sl.song_id = s.id
WHERE EXISTS (
SELECT sl2.* FROM roster_songs_locations AS sl2 WHERE s.id != sl2.song_id
) OR (
sl.location_id = '88fb5f94-aaa6-102c-a4fa-1f05bca0eec6'
OR
sl.location_id = '930555b0-a251-102c-a245-1559817ce81a'
)
GROUP BY s.id
该查询几乎可以正常工作,除了它从已分配给上述查询中未指定的sl.location_id的数据库歌曲中拉出。我认为它与我的EXISTS代码有关... ...
我有什么想法可以让它发挥作用吗?
答案 0 :(得分:1)
如果没有与该位置相关联的位置,sl.location_id
将为null
,那么只需将其添加到您的WHERE
:
SELECT s.* FROM roster_songs AS s
LEFT JOIN roster_songs_locations AS sl ON sl.song_id = s.id
WHERE
sl.location_id = NULL
OR
sl.location_id = '88fb5f94-aaa6-102c-a4fa-1f05bca0eec6'
OR
sl.location_id = '930555b0-a251-102c-a245-1559817ce81a'
)
GROUP BY s.id