0

少し助けが必要です。なぜこれを理解できないのかわかりません。

曲、ジャンル、および 2 つの間の関連付けのテーブルがあります。

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)

助けてくれてありがとう。私はこれを間違った方法で見ているだけだと感じています。

4

3 に答える 3

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)

つまり、1 行に 2 つのオプションがあるということです

a.genre_id=1 and a.genre_id=1 or
a.genre_id=1 and a.genre_id=3

行ごとにgenre_idしかないため、同じ行に2つの値を含めることはできません

于 2012-06-07T19:30:48.857 に答える
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

これがあなたが探しているものだと思います

于 2012-06-07T19:34:27.947 に答える
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
于 2012-06-07T19:36:01.193 に答える