求两表关联后Table2中POLE值不等于Table1的行的SUM值的SQL查询语句
嘿,这个需求其实很好实现,核心就是先把两个表通过关联字段对接起来,筛选出POLE值不匹配的行,再对目标列求和就行。我给你分两种常见场景写SQL,你可以根据实际表结构调整:
1. 只统计两表都有匹配记录的情况(内连接)
假设两个表用关联字段(比如id、order_no这类实际用来关联的列)对接,你要求和的是Table2里的某个数值列(比如amount),基础SQL如下:
SELECT SUM(t2.amount) AS total_mismatch_sum FROM Table2 t2 INNER JOIN Table1 t1 ON t2.关联字段 = t1.关联字段 WHERE t2.POLE <> t1.POLE;
⚠️ 注意:如果POLE字段可能存在NULL值,上面的<> 不会识别NULL的不匹配场景。要是需要把“一方为NULL、另一方有值”的情况也算进去,得补充判断:
SELECT SUM(t2.amount) AS total_mismatch_sum FROM Table2 t2 INNER JOIN Table1 t1 ON t2.关联字段 = t1.关联字段 WHERE t2.POLE <> t1.POLE OR t2.POLE IS NULL OR t1.POLE IS NULL;
2. 包含Table2中无Table1匹配记录的情况(左连接)
如果Table2里有些行在Table1中找不到对应记录,你也想把这些行纳入统计(毕竟没有对应值,肯定属于“不相等”范畴),就用左连接:
SELECT SUM(t2.amount) AS total_mismatch_sum FROM Table2 t2 LEFT JOIN Table1 t1 ON t2.关联字段 = t1.关联字段 WHERE t1.POLE IS NULL -- 没有匹配到Table1的记录 OR t2.POLE <> t1.POLE; -- 匹配到但POLE值不等
小提示
- 记得把
关联字段替换成你实际用来关联两个表的列名 - 如果是要统计不相等的行数而非求和数值,把
SUM(t2.amount)换成COUNT(*)就行
内容的提问来源于stack exchange,提问作者BTurkeli
相关产品推荐
相关产品推荐

