如何在SQL Server连接查询中返回不匹配的结果?附示例代码
在SQL Server中获取连接查询的不匹配结果
没问题,针对你要找出两个表连接后不匹配记录的需求,结合你提供的表结构和数据,我给你两种实用的解决方案:
方法1:使用RIGHT JOIN + 过滤NULL值
这是基于你现有查询思路的完整实现,通过RIGHT JOIN关联两个表,然后筛选出Figure表中无匹配的记录(也就是Figure表字段为NULL的行):
SELECT o.*, f.MonthNumber AS Figure_Month, f.Code AS Figure_Code, f.Figure AS Figure_Value FROM Figure f RIGHT JOIN Other o ON f.MonthNumber = o.MonthNumber AND f.Code = o.Code WHERE f.Code IS NULL;
逻辑说明:
RIGHT JOIN会保留Other表的所有记录,匹配Figure表中相同MonthNumber和Code的行WHERE f.Code IS NULL过滤掉两个表匹配成功的记录,剩下的就是Other表独有的、Figure表中没有对应匹配的行
执行结果:
运行后会返回Other表中这3条不匹配的记录:
| MonthNumber | Code | Figure | Figure_Month | Figure_Code | Figure_Value |
|---|---|---|---|---|---|
| 4 | K | 40 | NULL | NULL | NULL |
| 3 | D | 20 | NULL | NULL | NULL |
| 2 | J | 25 | NULL | NULL | NULL |
方法2:使用NOT EXISTS(推荐,性能更优)
如果你只需要Other表中的不匹配记录,用NOT EXISTS的写法逻辑更清晰,在大数据量下性能通常更好:
SELECT * FROM Other o WHERE NOT EXISTS ( SELECT 1 FROM Figure f WHERE f.MonthNumber = o.MonthNumber AND f.Code = o.Code );
逻辑说明:
直接从Other表筛选出那些**在Figure表中找不到相同MonthNumber和Code**的记录,结果和方法1一致,但写法更直观。
内容的提问来源于stack exchange,提问作者Ryan Gadsdon
相关产品推荐
相关产品推荐

