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);