如何用SQL筛选出同时包含两位指定艺人的歌曲ID
修正SQL获取同时关联两个艺人的歌曲ID
原SQL的WHERE子句逻辑有误,ARTIST_ID = '5000' and '5001'里的and '5001'会被SQL当作布尔值判断(非空字符串默认视为真),实际只会筛选出关联艺人5000的歌曲,完全无法实现“同时关联两个艺人”的需求。
下面提供两种可行的修正方案:
方案一:分组统计筛选
先筛选出关联目标艺人的记录,再按歌曲ID分组,统计每个歌曲关联的不同艺人数量,只保留数量为2的歌曲:
SELECT SONG_ID FROM SONG_ARTIST WHERE ARTIST_ID IN ('5000', '5001') GROUP BY SONG_ID HAVING COUNT(DISTINCT ARTIST_ID) = 2;
如果你的表中不会出现同一歌曲重复关联同一艺人的情况,可以去掉DISTINCT,直接用COUNT(ARTIST_ID) = 2。
方案二:自连接匹配
将表与自身连接,匹配同一个歌曲ID下分别关联两个艺人的记录:
SELECT sa1.SONG_ID FROM SONG_ARTIST sa1 JOIN SONG_ARTIST sa2 ON sa1.SONG_ID = sa2.SONG_ID WHERE sa1.ARTIST_ID = '5000' AND sa2.ARTIST_ID = '5001';
这种方法通过关联两条记录,确保同一个歌曲同时存在两个艺人的关联信息。
内容的提问来源于stack exchange,提问作者Nabel Sodipe
相关产品推荐
相关产品推荐

