doumei8126 2012-06-07 19:29
浏览 48
已采纳

mySQL查询加入与此匹配的关联表这个或这个

I need a little help. Not sure why I can't make sense of this one.

I have a table for songs, genre and an association between the two.

SONGS
song_id
song_name
active (0,1)

GENRE
genre_id
genre_name (rock,jazz,classical,newage,opera)

ASSOC
song_id
genre_id

I can do a simple search like this...

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 multi search like this.

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)

BUT, what if I want to get 1 and 2 OR 3? This does not work.

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)

Thanks in advance for help. I have a feeling I am just looking at this the wrong way.

  • 写回答

3条回答 默认 最新

  • drutjkpsr67393592 2012-06-07 19:36
    关注

    You can perform a self-join:

    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
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)