postgresql中的传递连接
Transitive joins in postgresql
在 postgresql 中实现传递连接的最佳方法是什么?目前,我想对 tables、a、b 和 c 进行完全外部连接。我的查询目前看起来像这样:
SELECT *
FROM a
FULL OUTER JOIN b
ON a."ID" = b."ID"
FULL OUTER JOIN c
ON a."ID" = c."ID"
我 运行 遇到一个问题,在 table B 和 table C 中匹配的某些记录显示在查询输出的不同行中,我意识到一定是因为我没有明确加入 tables B 和 C。编写 a=b、a=c 和 b=c 的“传递”查询的最佳方法是什么?
这是我当前输出的示例。现在,当只有 tables B 和 C 存在匹配 ID 时,我得到 2 个不同的行:
A ID
B ID
C ID
32
32
null
35
35
35
36
null
36
null
42
null
null
null
42
这是我想要的输出:
A ID
B ID
C ID
32
32
null
35
35
35
36
null
36
null
42
42
使用using
:
SELECT *
FROM a FULL OUTER JOIN
b
USING ("ID") FULL OUTER JOIN
c
USING ("ID");
如果在您的真实示例中,列具有不同的名称:
SELECT *
FROM a FULL OUTER JOIN
b
ON b.id = a.id FULL OUTER JOIN
c
ON c.id = COALESCE(b.id, a.id);
在 postgresql 中实现传递连接的最佳方法是什么?目前,我想对 tables、a、b 和 c 进行完全外部连接。我的查询目前看起来像这样:
SELECT *
FROM a
FULL OUTER JOIN b
ON a."ID" = b."ID"
FULL OUTER JOIN c
ON a."ID" = c."ID"
我 运行 遇到一个问题,在 table B 和 table C 中匹配的某些记录显示在查询输出的不同行中,我意识到一定是因为我没有明确加入 tables B 和 C。编写 a=b、a=c 和 b=c 的“传递”查询的最佳方法是什么?
这是我当前输出的示例。现在,当只有 tables B 和 C 存在匹配 ID 时,我得到 2 个不同的行:
A ID | B ID | C ID |
---|---|---|
32 | 32 | null |
35 | 35 | 35 |
36 | null | 36 |
null | 42 | null |
null | null | 42 |
这是我想要的输出:
A ID | B ID | C ID |
---|---|---|
32 | 32 | null |
35 | 35 | 35 |
36 | null | 36 |
null | 42 | 42 |
使用using
:
SELECT *
FROM a FULL OUTER JOIN
b
USING ("ID") FULL OUTER JOIN
c
USING ("ID");
如果在您的真实示例中,列具有不同的名称:
SELECT *
FROM a FULL OUTER JOIN
b
ON b.id = a.id FULL OUTER JOIN
c
ON c.id = COALESCE(b.id, a.id);