如何用T-SQL计算两张表去重后的总行数?
统计两表合并去重后的总行数问题
现有两张表Table_1和Table_2,需统计两表合并后去除重复ID的总行数。示例场景:Table_1有20000行,Table_2有500行,两表存在1个重复ID,期望总行数为20499。
我尝试了以下T-SQL语句,但未得到正确结果:
with cterc as (SELECT COUNT(*) as rn FROM Table_1 as t1 join Table_2 as t2 on t1.id <> t2.id) SELECT SUM(rn) as totalrowNo from cterc
错误原因
你写的SQL用了t1.id <> t2.id的关联条件,这会生成两表中ID不匹配的笛卡尔积,统计的是组合数而非去重后的总行数,逻辑完全错误。
正确解法
方法一:利用UNION自动去重
UNION会自动合并两表并去除重复ID,直接统计合并后的行数即可:
SELECT COUNT(*) AS totalrowNo FROM ( SELECT id FROM Table_1 UNION SELECT id FROM Table_2 ) AS combined_tables
方法二:总行数减去重复ID数
先计算两表总行数之和,再减去两表中重复的ID数量(即同时存在于两张表中的不同ID个数):
SELECT (SELECT COUNT(*) FROM Table_1) + (SELECT COUNT(*) FROM Table_2) - (SELECT COUNT(DISTINCT t1.id) FROM Table_1 t1 INNER JOIN Table_2 t2 ON t1.id = t2.id) AS totalrowNo
这个逻辑和示例场景完全匹配:20000 + 500 - 1 = 20499,直接得到期望结果。
内容的提问来源于stack exchange,提问作者User9995555
相关产品推荐
相关产品推荐

