统计一对多关系中左表无右表对应PK-FK关联记录的行数
统计一对多关系中左表无对应右表记录的行数
表结构与数据
左表(示例表名:left_table):
id | value ----------- 1 | a 2 | b 3 | c
右表(示例表名:right_table):
id | id-left | value -------------------- .. | 1 | ....
解决方案
以下两种SQL写法均可实现需求,返回预期结果2:
方法1:LEFT JOIN + IS NULL
利用左连接保留左表所有记录,筛选出右表无匹配的行并统计:
SELECT COUNT(l.id) AS unmatched_count FROM left_table l LEFT JOIN right_table r ON l.id = r.`id-left` WHERE r.`id-left` IS NULL;
方法2:NOT EXISTS子查询
通过子查询检查左表每行是否在右表存在匹配,统计不存在的行数:
SELECT COUNT(id) AS unmatched_count FROM left_table l WHERE NOT EXISTS ( SELECT 1 FROM right_table r WHERE r.`id-left` = l.id );
结果说明
上述查询会返回2,对应左表中未在右表找到id-left匹配记录的行。
内容的提问来源于stack exchange,提问作者mCs
相关产品推荐
相关产品推荐

