SQL Server:如何依据table1过滤master_table中指定account_number的数据
在SQL Server中查询重复person_number对应的主表数据
核心逻辑
先定位table1中重复出现的person_number,再关联master_table取出这些人员对应的账户记录,同时确保只保留table1中存在的账户数据。
方案一:子查询筛选重复人员后关联主表
SELECT m.account_number, m.account_balance FROM master_table m INNER JOIN ( -- 先获取重复person_number对应的所有account_number SELECT account_number FROM table1 WHERE person_number IN ( SELECT person_number FROM table1 GROUP BY person_number HAVING COUNT(*) > 1 -- 筛选出现次数≥2的person_number ) ) t ON m.account_number = t.account_number;
方案二:用CTE简化逻辑
WITH DuplicatePersonList AS ( -- 第一步:找出所有重复的person_number SELECT person_number FROM table1 GROUP BY person_number HAVING COUNT(*) > 1 ) -- 第二步:关联table1和主表,筛选目标数据 SELECT m.account_number, m.account_balance FROM master_table m JOIN table1 t ON m.account_number = t.account_number JOIN DuplicatePersonList dp ON t.person_number = dp.person_number;
特殊场景简化
如果你的table1本身已经是仅包含重复person_number的数据集(没有非重复人员的记录),可以直接关联两张表,加DISTINCT避免结果重复:
SELECT DISTINCT m.account_number, m.account_balance FROM master_table m INNER JOIN table1 t ON m.account_number = t.account_number;
内容的提问来源于stack exchange,提问作者Burt Ox
相关产品推荐
相关产品推荐

