PostgreSQL执行两个相似表的OR合并

时间:2016-01-07 23:53:55

标签: database postgresql

运行PostgreSQL 9.4.1。

我在数据库中有两个表( a b ),它们共享完全相同的模式:

a

 year |  r001   |  r002   
------+---------+---------
    1 |         |     600
  730 |         |        
 1000 |         |        
 1400 |         |        
 1450 |         |        
 1500 |         | 1467.15
 1600 |         | 1589.29

b

 year |  r001   |  r002   
------+---------+---------
    1 |     425 |     450
 1000 |     425 |     425
 1500 |     707 |     875
 1550 |     800 |     900
 1600 |   837.2 | 975.625

我想将这两个表合并在一起,优先使用表 a ,但将表 a 中的任何NULL值替换为表 b ,如果它们存在,例如,1000年行中的值。

此外,如果表 a 或表 b 具有唯一年份,例如,表 a 有一行为730年和table b 有一行1550,我希望将它们插入到生成的合并表中,即使它仅由NULL填充。

提前感谢您提出的任何想法!

1 个答案:

答案 0 :(得分:1)

听起来你正在寻找一个完整的外部联接:

select year, 
       coalesce(a.r001, b.r001) as r001,
       coalesce(a.r002, b.r002) as r002
from table_a a
  full outer join table_b b using (year)
order by year;

连接语法using (year)会生成一年的列,其中包含该表中具有一年的年份值。

SQLFiddle示例:http://sqlfiddle.com/#!15/be6b1/1