Postgres查询:如何返回关联表无对应记录的主表数据?
解决Postgres跨表关联查询缺失记录的问题
原查询语句使用的是隐式内连接(通过逗号分隔表+WHERE条件关联),这种方式仅会返回两张表中id完全匹配的记录,因此会丢失两类数据:
- 存在于
Person但未关联Address的人员记录 - 存在于
Address但未关联Person的地址记录
要同时包含这两类缺失的记录,你需要使用全外连接(FULL OUTER JOIN),它会返回两个表的所有记录,匹配的行合并展示,不匹配的行对应另一张表的字段会显示为NULL。
修改后的查询语句如下:
SELECT * FROM "Person" p FULL OUTER JOIN "Address" a ON p.id = a.id;
如果你的需求只是要返回所有人员(无论是否有地址),不需要单独的无对应人员的地址记录,那么使用**左外连接(LEFT OUTER JOIN)**更合适:
SELECT * FROM "Person" p LEFT OUTER JOIN "Address" a ON p.id = a.id;
注:
OUTER关键字可以省略,写成LEFT JOIN或FULL JOIN,语义完全一致。
内容的提问来源于stack exchange,提问作者George Shalhoub
相关产品推荐
相关产品推荐

