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

SQL如何拼接表中多列值并去除重复值(外连接结果场景)

多列拼接去重生成单列结果实现方案

场景说明

外连接查询得到的结果表包含ColumnA、ColumnB两个字段,样例数据如下:

ColumnA     ColumnB
--------------------
12345       null
69875       null
null        15648
76582       76582
null        29829
35731       35731

处理规则:

  • 逐行读取两列数据,任意一列为null时取另一列的非空值
  • 两列值相同时仅保留一份
  • 最终输出无重复值的单列ColumnC,期望结果如下:
ColumnC
-------
12345       
69875      
15648       
76582       
29829       
35731       

实现方式

写法1:适配当前样例场景(简洁高效)

用标准SQL的COALESCE函数逐行取第一个非空值,搭配DISTINCT全局去重,兼容MySQL、PostgreSQL、SQL Server、BigQuery等绝大多数数据库:

SELECT DISTINCT COALESCE(ColumnA, ColumnB) AS ColumnC
FROM 你的外连接结果表;

逻辑说明:COALESCE入参从左到右判断,遇到第一个非null值就直接返回,刚好匹配「空值取另一列、同值只留一份」的逐行处理逻辑,外层DISTINCT会兜底过滤所有重复条目,针对当前样例场景的执行效率最高。

写法2:兼容更复杂场景(鲁棒性更强)

如果后续外连接结果可能出现「同一行两列都非空且值不相等」的情况(比如ColumnA=123, ColumnB=456),写法1会漏掉其中一个值,此时用UNION合并两列的非空结果即可,UNION自带全局去重能力,无需额外加去重关键字:

SELECT ColumnA AS ColumnC 
FROM 你的外连接结果表 
WHERE ColumnA IS NOT NULL
UNION
SELECT ColumnB AS ColumnC 
FROM 你的外连接结果表 
WHERE ColumnB IS NOT NULL;

逻辑说明:该写法会把两列所有非空值全部汇总后自动去重,不管是行内两列值重复、还是跨行的值重复,都会被过滤,适配所有可能的外连接结果场景。

内容的提问来源于stack exchange,提问作者Ivan Alducin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:09:39