【发布时间】:2016-08-15 17:10:59
【问题描述】:
我有两个表table,它们的结构相同,但属于不同的模式(模式A 和B)。所有有问题的行都将始终出现在A.table 中,但可能会出现也可能不会出现在B.table 中。 B.table 本质上是对 A.table 中默认值的覆盖。
因此,我的查询在每个字段上使用了一个 COALESCE,类似于:
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)
这很好用,但我还想添加数据源。在上面的示例中,假设 id=2 存在于 B.table 但不存在于 1 或 3 中,我想包括一些指示,表明 A 是 1 和 3 的来源,而 B 是 2 的来源。
所以数据可能如下所示
+---------------------------------+
| id | foo | bar | source |
+---------------------------------+
| 1 | a | b | A |
| 2 | c | d | B |
| 3 | e | f | A |
+---------------------------------+
我并不关心source的值是多少,只要我能区分A和B。
我不是 pgsql 专家(绝对不是),但我已经修改了 EXISTS 和子查询,但到目前为止还没有运气。
【问题讨论】:
标签: sql postgresql left-join coalesce