确定COALESCE字段

时间:2016-08-15 17:10:59

标签: sql postgresql left-join coalesce

我有两个表table,它们在结构上相同但属于不同的模式(模式AB)。相关的所有行都将始终显示在A.table中,但可能会显示在B.table中,也可能不会显示在B.table中。 A.table基本上是对SELECT COALESCE(B.id, A.id) as id, COALESCE(B.foo, A.foo) as foo, COALESCE(B.bar, A.bar) as bar FROM A.table LEFT JOIN B.table ON (A.id = B.id) WHERE A.id in (1, 2, 3) 中默认值的覆盖。

因此,我的查询在每个字段上使用COALESCE,类似于:

id=2

这很好用,但我也想添加数据源。在上面的示例中,假设B.table中存在+---------------------------------+ | id | foo | bar | source | +---------------------------------+ | 1 | a | b | A | | 2 | c | d | B | | 3 | e | f | A | +---------------------------------+ 但不存在1或3,我希望包含一些指示:A是1和3的来源,而B是2的来源。

因此数据可能如下所示

name=value

只要我能区分A和B,我就不在乎源的价值。

我不是pgsql专家(不是长篇大论)但是我已经修改了EXISTS和子查询,但到目前为止没有运气。

1 个答案:

答案 0 :(得分:2)

由于显示默认值(来自A.table)的记录为B.id提供了NULL,您只需要将此列规范添加到查询中:

CASE WHEN B.id IS NULL THEN 'A' ELSE 'B' END AS Source