PostgreSQL按主键合并表:仅合并t2中与t1主键匹配的行
解决方案:合并指定条件的两张同结构表
可以通过UNION ALL结合子查询筛选来实现需求,核心SQL语句如下:
SELECT * FROM t1 UNION ALL SELECT * FROM t2 WHERE id IN (SELECT id FROM t1);
语句说明
SELECT * FROM t1:直接获取t1的所有行,满足结果包含t1全部数据的要求UNION ALL:用于合并两个结果集,和UNION不同,它不会自动去重,正好保留t1和t2中同id的重复行(比如示例中的id=5)SELECT * FROM t2 WHERE id IN (SELECT id FROM t1):通过子查询筛选出t2中主键id存在于t1的行,只保留符合条件的t2数据
验证示例
代入你提供的示例数据后,执行上述语句会得到如下结果:
| id | A | B | C |
|---|---|---|---|
| 1 | xx | r | g |
| 2 | cc | r | g |
| 5 | d | g | e |
| 5 | y | jku | u |
完全匹配你期望的合并结果。
内容的提问来源于stack exchange,提问作者Alex_Y
相关产品推荐
相关产品推荐

