在Postgres sql中反向相交的两个表

时间:2018-12-22 11:43:51

标签: postgresql psql

我有两个A和B查询,它们的输出具有相同的字段。

现在,我需要将丢失的记录从B合并到A。 有5个同名字段,但最后一个字段的值有所不同。

除了B的每个最后一个字段都具有与A的最后一个字段不同的值之外,我无法执行其他操作。

如何执行合并?

对于合并,我只需要将条件放在两个字段上即可。

请看下面的图片。

样本输入:

查询A

Id | Name | count 
1  | Test | 3
2  | Test1 | 2

查询B

Id | Name | count 
1  | Test | 0
2  | Test1 | 0
3  | Test2 | 0
4  | Test3 | 0

结果应基于ID和名称列

预期结果:

Id | Name | count 
1  | Test | 3
2  | Test1 | 2
3  | Test2 | 0
4  | Test3 | 0

谢谢

1 个答案:

答案 0 :(得分:1)

使用full joincoalesce():

with query_a(id, name, count) as (
values
    (1, 'Test', 3),
    (2, 'Test1', 2)
),
query_b(id, name, count) as (
values
    (1, 'Test', 0),
    (2, 'Test1', 0),
    (3, 'Test2', 0),
    (4, 'Test3', 0)
)
select id, name, coalesce(a.count, b.count) as count
from query_a a
full join query_b b using(id, name)

 id | name  | count 
----+-------+-------
  1 | Test  |     3
  2 | Test1 |     2
  3 | Test2 |     0
  4 | Test3 |     0
(4 rows)