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
的工作原理。