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

如何统计Table1中存在但Table2中缺失的产品数量(列名不同)

嘿,这个需求我经常碰到,给你几个实用的SQL查询方案,都能精准算出你要的「Table1存在但Table2没有的产品数量」,也就是需要手动添加的产品数:

方法1:用NOT EXISTS子查询(推荐,性能稳定)

这种方法在绝大多数数据库(MySQL、PostgreSQL、SQL Server等)里都能正常运行,而且当两个表的主键列有索引时,查询效率很高:

SELECT COUNT(*) AS need_add_count
FROM Table1
WHERE NOT EXISTS (
    SELECT 1
    FROM Table2
    WHERE Table2.code_table2 = Table1.code_table1
);

逻辑很直白:遍历Table1的每一行,检查Table2里有没有相同主键值的记录,没有的话就算入统计。

方法2:LEFT JOIN + IS NULL

这也是很常用的写法,通过左连接保留Table1的所有行,然后筛选出Table2那边没有匹配到的记录(也就是code_table2为NULL的行):

SELECT COUNT(DISTINCT Table1.code_table1) AS need_add_count
FROM Table1
LEFT JOIN Table2 ON Table1.code_table1 = Table2.code_table2
WHERE Table2.code_table2 IS NULL;

这里加DISTINCT是为了防止Table1里有重复主键(虽然主键应该唯一,但保险起见可以加上),如果你的Table1主键绝对唯一,也可以直接用COUNT(*)。

方法3:NOT IN(注意避坑)

如果你的Table2里code_table2列绝对没有NULL值,可以用这种写法,代码更简洁:

SELECT COUNT(*) AS need_add_count
FROM Table1
WHERE code_table1 NOT IN (
    SELECT code_table2
    FROM Table2
);

⚠️ 重点提醒:如果Table2的code_table2存在NULL值,NOT IN会返回空结果,因为SQL里任何值和NULL比较都返回未知,所以这种情况千万别用这个方法。

用你的测试数据验证

按照你给出的示例:

  • Table1的code_table1:A1001、A1002、A1003、A1004、A1005、A1006
  • Table2的code_table2:A1001、A1002、A1003、A1004

执行上面任意一种查询,结果都会是2,对应A1005和A1006这两个需要手动添加的产品。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:51:17