如何使用UNION仅检索指定列中存在重复名称的记录?
实现UNION后仅保留Name列存在重复的记录
嘿,我来帮你搞定这个需求!咱们先理清楚场景:你有Table A和Table B两张表,现在想用UNION合并它们,但只想保留那些Name在合并结果里出现至少两次的记录——也就是说,像Jessy、Jenna这种只在单张表出现一次的Name,对应的行要排除,而Jack、John这种重复出现的Name,所有相关行都要留下。
先看看两张表的原始数据:
Table A
| ID | Name | Age | Sex |
|---|---|---|---|
| 1 | Jack | 20 | Male |
| 2 | James | 18 | Male |
| 3 | Jane | 17 | Female |
| 4 | Jessy | 16 | Female |
| 5 | John | 34 | Male |
Table B
| ID | Name | Age | Sex |
|---|---|---|---|
| 1 | Jack | 21 | Male |
| 2 | James | 18 | Male |
| 3 | Jane | 17 | Male |
| 4 | Jenna | 17 | Female |
| 5 | John | 34 | Male |
| 6 | John | 34 | Male |
核心思路:先合并所有记录,再筛选重复Name的行
这里要注意,不能直接用UNION,因为UNION会自动去重相同的行,可能导致某些Name的出现次数被低估(比如James在两张表完全一样,UNION后只留一行,会误以为Name只出现一次)。所以第一步得用UNION ALL把两张表的所有记录都合并,再统计每个Name的出现次数,最后过滤出次数≥2的记录。
方法1:用窗口函数(简洁又高效)
窗口函数可以直接在合并后的结果里计算每个Name的出现次数,一步到位:
WITH combined_records AS ( -- 先合并两张表的所有记录,不去重 SELECT ID, Name, Age, Sex FROM TableA UNION ALL SELECT ID, Name, Age, Sex FROM TableB ), name_counts AS ( -- 给每条记录加上对应Name的总出现次数 SELECT ID, Name, Age, Sex, COUNT(*) OVER (PARTITION BY Name) AS total_occurrences FROM combined_records ) -- 只保留出现次数≥2的记录 SELECT ID, Name, Age, Sex FROM name_counts WHERE total_occurrences >= 2;
方法2:用子查询筛选重复Name
如果你不习惯窗口函数,也可以用子查询先找出所有重复的Name,再关联回合并后的结果:
-- 先找出所有在合并后出现≥2次的Name WITH duplicate_names AS ( SELECT Name FROM ( SELECT Name FROM TableA UNION ALL SELECT Name FROM TableB ) AS all_names GROUP BY Name HAVING COUNT(*) >= 2 ) -- 取出这些Name对应的所有记录 SELECT c.ID, c.Name, c.Age, c.Sex FROM ( SELECT ID, Name, Age, Sex FROM TableA UNION ALL SELECT ID, Name, Age, Sex FROM TableB ) AS c INNER JOIN duplicate_names ON c.Name = duplicate_names.Name;
最终结果
执行上面的语句后,你会得到这样的结果:
| ID | Name | Age | Sex |
|---|---|---|---|
| 1 | Jack | 20 | Male |
| 1 | Jack | 21 | Male |
| 2 | James | 18 | Male |
| 2 | James | 18 | Male |
| 3 | Jane | 17 | Female |
| 3 | Jane | 17 | Male |
| 5 | John | 34 | Male |
| 5 | John | 34 | Male |
| 6 | John | 34 | Male |
可以看到,Jessy和Jenna的记录被排除了,所有Name重复的行都被保留下来啦!
内容的提问来源于stack exchange,提问作者jakealbert
相关产品推荐
相关产品推荐

