强制脱节:漂亮的查询?
Mandatory disjoint: beautiful query?
我有一个 table 的架构
用户(用户名、密码、全名、用户类型)
有 4 种类型的用户,每种类型都有一个 table 以及特定类型的附加属性:
- 个人(用户名(外国),教育,work_since)
- 公司*(用户名(外国),总部,办公室,num_employees)
- 还有几个...
用户的所有附加 table 中可能只有 1 条记录。
我需要根据用户类型显示来自用户 table 和附加属性 table 的所有用户信息。
首先想到的是先查询用户table,然后根据返回的类型,查询其中一个相关的table...但是这样也太许多查询,所以我想知道,是否可以在单个查询中完成?
使用left join
:
select u.*,
(case when i.username is not null then 'individual'
when c.username is not null then 'corporation'
end) as usertype,
i.education, i.work_since,
c.headquarters, c.office, c.num_employees
from users u left join
individual i
on i.username = u.username left join
corporation c
on c.username = u.username;
我有一个 table 的架构 用户(用户名、密码、全名、用户类型)
有 4 种类型的用户,每种类型都有一个 table 以及特定类型的附加属性:
- 个人(用户名(外国),教育,work_since)
- 公司*(用户名(外国),总部,办公室,num_employees)
- 还有几个...
用户的所有附加 table 中可能只有 1 条记录。
我需要根据用户类型显示来自用户 table 和附加属性 table 的所有用户信息。
首先想到的是先查询用户table,然后根据返回的类型,查询其中一个相关的table...但是这样也太许多查询,所以我想知道,是否可以在单个查询中完成?
使用left join
:
select u.*,
(case when i.username is not null then 'individual'
when c.username is not null then 'corporation'
end) as usertype,
i.education, i.work_since,
c.headquarters, c.office, c.num_employees
from users u left join
individual i
on i.username = u.username left join
corporation c
on c.username = u.username;