You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何关联BANDS与SONGS表,展示歌曲数<3的乐队(含无歌曲乐队)

解决思路与完整SQL

你的核心需求是要包含没录过任何歌曲的乐队,同时把乐队ID关联到名称,这时候用LEFT JOIN是关键——它能保留BANDS表的所有记录,不管对应乐队有没有歌曲。下面是能满足需求的完整SQL:

SELECT 
    b.NAME AS BAND_NAME,
    COUNT(s.ID) AS NUMBER_OF_SONGS
FROM BANDS b
LEFT JOIN SONGS s ON b.ID = s.ID
GROUP BY b.ID, b.NAME
HAVING COUNT(s.ID) < 3;

关键部分拆解

  • LEFT JOIN关联表:这里用BANDS作为主表,左连接SONGS,这样哪怕某个乐队在SONGS里一条记录都没有,也会被保留在结果里,对应的s.ID会是NULL
  • 正确计数:别用COUNT(*)!它会把左连接产生的NULL行也算成1,而COUNT(s.ID)只会统计s.ID不为空的行数——也就是该乐队实际录的歌曲数,没录歌的乐队就会显示0,这才是你要的结果。
  • 分组逻辑:必须按BANDS的ID和名称分组(如果你的NAME字段是唯一的,只按NAME也可以,但按ID分组更稳妥,避免不同ID的乐队重名导致统计错误)。
  • 过滤条件HAVING COUNT(s.ID) < 3会把所有歌曲数小于3的乐队(包括0)筛选出来。

原SQL的问题

你原来的查询只从SONGS表取数据,所以根本关联不上BANDS的名称,而且那些没录过歌的乐队在SONGS里没有记录,自然也不会出现在结果里——这就是为什么你得不到想要的完整结果。

内容的提问来源于stack exchange,提问作者Kuba Krzyżyński

火山引擎 最新活动