如何解决postgresql 中的传递连接
在 postgresql 中实现传递连接的最佳方法是什么?目前,我想对表 a、b 和 c 进行完整的外部联接。我的查询目前看起来像这样:
SELECT *
FROM a
FULL OUTER JOIN b
ON a."ID" = b."ID"
FULL OUTER JOIN c
ON a."ID" = c."ID"
我遇到了一个问题,即某些在表 B 和表 C 中匹配的记录显示在查询输出的不同行中,我意识到这一定是因为我没有明确连接表 B 和 C。编写 a=b、a=c 和 b=c 的“传递”查询的最佳方法是什么?
这是我当前输出的示例。现在,当只存在表 B 和 C 的匹配 ID 时,我会得到 2 行:
身份证 | B ID | C ID |
---|---|---|
32 | 32 | 空 |
35 | 35 | 35 |
36 | 空 | 36 |
空 | 42 | 空 |
空 | 空 | 42 |
这是我想要的输出:
一个ID | B ID | C ID |
---|---|---|
32 | 32 | 空 |
35 | 35 | 35 |
36 | 空 | 36 |
空 | 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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。