You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS SQL Server自连接SQL写法:查询音乐行业客户推荐的客户及推荐人

MS SQL Server 自连接查询修正方案

现有查询的问题定位

你当前编写的查询运行后仅能返回1条符合要求的记录,存在两处核心偏差:

  • 自连接关联方向颠倒:表中CCIdReferredby字段存储的是「当前行客户对应的推荐人ID」,正确关联逻辑应为:被推荐客户记录上的CCIdReferredby值,匹配推荐客户的主键CCid。而查询中写的c.CCid = r.CCIdReferredby是反向匹配,会导致C111(音乐行业客户,推荐了SkyJet)这条关联完全无法匹配,出现结果缺失。
  • 隐式连接写法(FROM后用逗号拼接多表)虽然语法在SQL Server中合法,但关联条件和筛选条件混在同一个WHERE子句中,可读性差,容易因漏写关联条件生成无意义的笛卡尔积结果。

可直接运行的正确查询

推荐使用的显式JOIN写法(结构清晰易维护)

SELECT 
    c.CCName AS ReferredClientName,
    r.CCName AS ReferredBy
FROM CorpClient c
INNER JOIN CorpClient r
    ON c.CCIdReferredby = r.CCid
WHERE r.CCIndustry = 'Music'

适配你原有书写习惯的修正版本

如果需要保留原本的隐式连接结构,仅需将关联条件的方向修正即可:

SELECT c.CCName, r.CCName AS ReferredBy
FROM CorpClient c, CorpClient r
WHERE c.CCIdReferredby = r.CCid
  AND r.CCIndustry = 'Music'

测试数据匹配验证

基于给出的CorpClient表结构与测试数据,上述查询返回的正确结果为:

ReferredClientNameReferredBy
SkyJetBlingNotes
SouthAlpsWindyCT

结果逻辑拆解:

  • 音乐行业的推荐客户共2位:C111(BlingNotes)、C777(WindyCT)
  • C111作为推荐人,对应被推荐客户为CCIdReferredby = C111的C222(SkyJet)
  • C777作为推荐人,对应被推荐客户为CCIdReferredby = C777的C888(SouthAlps)
  • 其余记录因推荐人不属于音乐行业,会被WHERE条件排除,不会出现在最终结果中。

内容的提问来源于stack exchange,提问作者sarmax25

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 11:15:11