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

基于PostgreSQL的RSQL如何合并含2个共享列的两张表

PostgreSQL 合并列数不同的表(自动填充NULL)

针对你需要合并table1和table2,且自动为table2缺失的列填充NULL的需求,不用手动写大量NULL AS 列名,推荐以下两种简洁方案:

方案1:利用JSONB自动匹配列(无需额外扩展)

PostgreSQL 9.4及以上版本支持,通过JSONB类型转换自动匹配列名,缺失列自动填充NULL:

SELECT * FROM table1
UNION ALL
SELECT (jsonb_populate_record(NULL::table1, to_jsonb(table2))).*
FROM table2;

原理

to_jsonb(table2)将table2的行转为JSONB对象,jsonb_populate_record(NULL::table1, ...)会把JSONB中的键值对填充到table1的行结构中,未匹配的字段自动设为NULL,最后通过.*展开所有列。

方案2:使用HStore扩展(需先安装)

如果习惯使用HStore类型,可借助其行更新功能实现:

  1. 先安装HStore扩展(仅需执行一次):
CREATE EXTENSION IF NOT EXISTS hstore;
  1. 执行合并查询:
SELECT * FROM table1
UNION ALL
SELECT (ROW(NULL::table1) #= hstore(table2)).*
FROM table2;

原理

ROW(NULL::table1)创建一个所有字段为NULL的table1行,hstore(table2)将table2转为HStore键值对,#=运算符用HStore中的值替换行中对应字段,最后展开所有列。

这两种方案都无需手动指定任何缺失列,即使table1列数再多,代码也无需修改,完美解决冗余问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 09:32:26