运行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填充。
提前感谢您提出的任何想法!
答案 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