1
我有songs
表,lyrics
表和tags
表。一首歌曲可能有多个歌词(或没有),每个歌词只有一个标签。所以,在lyrics
表中我有两个外键,song_id
和tag_id
,它们都链接到相应表中的记录。SQL group by并只保留那些包含给定值的列的组
我想选择所有歌曲,不要有给出标记。例如,给出下面的视图(这三个表INNER JOIN
ED):
song_id | lyric_id | tag_id | tag_value
---------------------------------------
1 | 1 | 1 | 'pop'
1 | 2 | 2 | 'hip-hop'
2 | 3 | 1 | 'pop'
给出“嘻哈”标签
,我需要检索的第二首歌,因为它具有链接没有链接歌词标签与'嘻哈'值。
如果我给出'pop'标签,则不会检索到任何歌曲,因为这两首歌都有一个歌词,其中包含'pop'标签。
如何以最佳方式构建这样的查询?我正在考虑按song_id
分组,然后做HAVING(tag_value != 'hip-hop')
,但不幸的是这不是HAVING
的工作原理。