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

SQL Server 2017多表查询:筛选无Intro课程的Record与Topic

解决未关联Intro课程的Record查询问题

针对你的需求,在SQL Server 2017中可以用两种高效的方式实现,避免结果冗余:

方法1:LEFT JOIN + 空值过滤

通过LEFT JOIN关联表并仅匹配Intro课程,再筛选未匹配到的记录,同时用DISTINCT避免重复行:

SELECT DISTINCT t1.Record, t1.Topic
FROM Table1 t1
LEFT JOIN Table2 t2 
  ON t1.Record = t2.Record 
  AND t2.Course = 'Intro' -- 仅关联Intro课程的记录
WHERE t2.Record IS NULL; -- 筛选未匹配到Intro课程的行

说明

  • 将Course = 'Intro'放在JOIN条件中,确保LEFT JOIN保留Table1的所有行,仅标记出关联了Intro课程的记录
  • WHERE t2.Record IS NULL会过滤掉那些关联到Intro课程的行,剩下的就是未关联Intro的记录
  • DISTINCT用于处理Table1本身存在重复记录,或Table2中同一Record有多个非Intro课程导致的结果冗余

方法2:NOT EXISTS子查询

利用NOT EXISTS检查当前Record是否不存在Intro课程的关联记录,这种方式性能优异且不会产生重复:

SELECT t1.Record, t1.Topic
FROM Table1 t1
WHERE NOT EXISTS (
    SELECT 1 -- 仅检查存在性,无需返回实际列
    FROM Table2 t2
    WHERE t2.Record = t1.Record
      AND t2.Course = 'Intro'
);

说明

  • 子查询仅验证是否存在匹配的Intro课程记录,SQL Server会对这种查询做优化,执行效率高
  • 只要Table1中没有重复的Record行,结果不会出现冗余

为什么之前结果冗余?

你之前的查询可能存在以下问题:

  • 使用了INNER JOIN,仅返回有课程关联的记录,而非所有Table1记录
  • 将Course <> 'Intro'放在WHERE条件中,导致同一Record关联多个非Intro课程时,结果重复
  • 未添加去重逻辑(如DISTINCT或GROUP BY),导致重复行出现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:39:14