我需要一些帮助。不知道为什么我无法理解这个。
我有一张表,用于歌曲,流派和两者之间的关联。
SONGS
song_id
song_name
active (0,1)
GENRE
genre_id
genre_name (rock,jazz,classical,newage,opera)
ASSOC
song_id
genre_id
我可以像这样做一个简单的搜索...
SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND a.genre_id = 1
这样的多搜索。
SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND (a.genre_id = 1
OR a.genre_id = 2)
但是,如果我想获得1和2 OR 3怎么办?这不起作用。
SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND a.genre_id = 1
AND (a.genre_id = 2
OR a.genre_id = 3)
提前感谢您的帮助。我有一种感觉,我只是以错误的方式看待它。
答案 0 :(得分:1)
试试这个,
SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND (a.genre_id = 1
OR a.genre_id = 2
OR a.genre_id = 3)
你的where子句错了,因为
AND a.genre_id = 1 AND (a.genre_id = 2 OR a.genre_id = 3)
这意味着在一行中你有两个选择
a.genre_id=1 and a.genre_id=1 or
a.genre_id=1 and a.genre_id=3
并且每行只有一个genre_id,所以你不能在同一行中有2个值
答案 1 :(得分:0)
SELECT s.song_name, s.song_id
FROM (songs s)
LEFT JOIN assoc a ON s.song_id = a.song_id
WHERE s.active = 1
AND (a.genre_id = 1
AND a.genre_id = 2)
OR a.genre_id = 3
我认为这就是你要找的东西
答案 2 :(得分:0)
您可以执行自我加入:
SELECT s.song_name, s.song_id
FROM songs AS s
JOIN assoc AS a1 ON a1.song_id = s.song_id AND a1.genre_id = 1
JOIN assoc AS a2 ON a2.song_id = s.song_id AND a2.genre_id IN (2,3)
WHERE s.active = 1