我有两个表table
,它们在结构上相同但属于不同的模式(模式A
和B
)。相关的所有行都将始终显示在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和子查询,但到目前为止没有运气。
答案 0 :(得分:2)
由于显示默认值(来自A.table)的记录为B.id提供了NULL,您只需要将此列规范添加到查询中:
CASE WHEN B.id IS NULL THEN 'A' ELSE 'B' END AS Source