我确实意识到我面临的问题不是火箭科学,但我仍然没有找到有关解决此问题的任何信息。
我的数据库中有多个表 (PSQL
) 我想创建一个 select
查询来为我的应用程序创建一个报告功能。
这是我的查询:
select
s.id, s.name, st.name, p.firstname || ' ' || p.lastname,
f.name, f.store_date, bdt.name, bd.comment
from
system s, systemstatus st, role w, person p, file f,
documenttype bdt, document bd
where
w.system_id = s.id and
p.id = w.person_id and
st.id = s.status_id and
bd.system_id = s.id and
bd.file_id = f.id and
bd.type_id = bdt.id and
bd.role_id = w.id;
查询有效 我得到 300
行,其中完全填满了我要搜索的值。问题是我在 System
表中有大约 1000
行。可能没有可以与特定的 System
链接的 Person
或 Document
。
我想查看我的 System
表中的所有行(我的意思是大约 1000),当我无法链接 Person
或 Document 时
与 System
我希望该字段为空(现在它根本不显示)
最佳答案
答案的主要部分是 - 您需要 left outer join .
答案的其他部分 - 使用 ANSI join syntax并格式化您的查询:
select
s.id, s.name, st.name, p.firstname || ' ' || p.lastname, f.name,
f.store_date, bdt.name, bd.comment
from system as s
left outer join systemstatus as st on st.id= s.status_id
left outer join role as w on w.system_id = s.id
left outer join person as p on p.id = w.person_id
left outer join document as bd on bd.system_id = s.id and bd.role_id = w.id
left outer join documenttype as bdt on bdt.id = bd.type_id
left outer join file as f on f.id = bd.file_id
永远记住,总有一天会有人阅读您的代码(也许将来就是您 :))- 因此可读性很重要!
关于SQL Select 语句-多表允许空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18504200/