如何将3个数据表的3列合并为无重复名称的独立结果表?附示例
嗨,我来帮你搞定这个多表列合并去重的需求!要把三个不同数据表的指定列合并成一个无重复值的独立结果表,核心思路就是合并所有值+自动去重,下面分不同场景给你具体方案:
解决方法:合并多表列并生成无重复结果表
通用SQL实现(适用于大多数数据库)
假设你的三个表分别叫table_a、table_b、table_c,要提取的列是col_a、col_b、col_c,我们可以用UNION关键字——它天生就会合并多个查询结果并自动剔除重复值,完美匹配你的要求。
1. 先预览去重后的结果
先跑这条SQL看看效果:
SELECT col_a AS 名称 FROM table_a UNION SELECT col_b AS 名称 FROM table_b UNION SELECT col_c AS 名称 FROM table_c;
划重点:一定要用
UNION而不是UNION ALL!后者只会粗暴合并,不会去重,前者才会帮你去掉重复的名称。
2. 直接生成独立的结果表
如果要把结果存成新表,用CREATE TABLE ... AS语句就行(不同数据库细节略有差异,通用版如下):
CREATE TABLE 最终结果表 AS SELECT col_a AS 名称 FROM table_a UNION SELECT col_b AS 名称 FROM table_b UNION SELECT col_c AS 名称 FROM table_c;
不同工具的专属调整
SQL Server 用户
可以用SELECT ... INTO的写法更顺手:
SELECT 名称 INTO 最终结果表 FROM ( SELECT col_a AS 名称 FROM table_a UNION SELECT col_b AS 名称 FROM table_b UNION SELECT col_c AS 名称 FROM table_c ) AS temp_table;
Excel/Access 用户(非数据库场景)
如果是用办公软件处理,步骤更简单:
- 把三个表的目标列数据,依次复制到同一个空白工作表的同一列里
- 选中这列数据,点击「数据」选项卡→「删除重复值」
- 在弹出的窗口里只勾选「名称」列,确认后就得到无重复的结果了
避坑小贴士
- 如果三个列的数据类型不一样(比如一个是数字,一个是文本),记得用
CAST/CONVERT统一类型,避免报错:
SELECT CAST(col_a AS VARCHAR(100)) AS 名称 FROM table_a UNION SELECT CAST(col_b AS VARCHAR(100)) AS 名称 FROM table_b UNION SELECT CAST(col_c AS VARCHAR(100)) AS 名称 FROM table_c;
- 要是原表有空白值(
NULL),UNION会自动把重复的空值合并成一个;如果想直接排除空值,就在每个SELECT后面加WHERE 列名 IS NOT NULL就行。
内容的提问来源于stack exchange,提问作者Lina
相关产品推荐
相关产品推荐

