我有多个表在我的Postgres数据库是由一个名为id
的字段链接。我的主表Person
通过id
链接到其他表Address
,Phone
和Email
。
这行代码从数据库中的所有表中获取有关该人的信息:
SELECT *
FROM "Person" p, "Address" a
WHERE p.id = a.id
这并没有显示p.id
存在的行,但是我们还没有那个特定的人的地址(无论如何都是a.id != p.id
)。
如何使选择语句也返回a.id
未发现包含p.id
的字段?
您需要一个外部连接,这种连接只能通过在WHERE子句中去掉陈旧、过时和脆弱的隐式连接并使用合适的join操作符来实现:
select *
from "Person" p
left join "Address" a on p.id = a.id;