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

PostgreSQL将两列合并为无空值单列的更优实现方案咨询

方案1:使用array_remove预过滤数组空值(最简洁)

直接在构造数组后先移除所有NULL元素再展开,无需嵌套子查询:

SELECT DISTINCT unnest(array_remove(array[c1, c2], NULL)) AS c3 FROM ...

这种写法代码最短,如果你后续需要合并更多列,只需要往array[c1,c2]里追加列名即可,维护成本很低,也不会重复扫描原表。

方案2:使用UNION实现(效率更高)

如果你的数据量较大,更推荐这种写法,不需要做数组构造、展开的额外运算,UNION本身会自动对结果去重:

SELECT c1 AS c3 FROM ...
UNION
SELECT c2 AS c3 FROM ... WHERE c2 IS NOT NULL

如果c1、c2列上存在索引,数据库优化器可以直接命中索引,执行效率比数组展开的方案高很多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:54:04