簡體   English   中英

mySQL查詢加入關聯表與此和這個或這個匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM