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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 03:58:38