[英]mySQL query joining association table matching this AND this OR this
我需要一點幫助。 不知道為什么我不能理解這一點。
我有一張桌子,里面有歌曲,類型和兩者之間的關聯。
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或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)
在此先感謝您的幫助。 我有一種錯誤的看法。
嘗試這個,
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個值
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
我認為這就是您要尋找的
您可以執行自我加入:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.