假设我有5个表:{!! $object->text !!}
,[AllStates]
,[FerrariStates]
,[ToyotaStates]
,[FordStates]
。
每个表仅由一列组成:[TelsaStates]
。 state
拥有全部50种状态,其余的可能具有或没有全部状态。
我的结果将精确地有50行,每列将显示是否有Toyota,Ford,Ferrari和Telsa。因此结果将有5列。
因此,如果我想显示所有50个州,并在第二栏中显示包含法拉利的州,那么我的查询将如下所示:
[AllStates]
但是现在我想包括select [AllStates].state, [FerrariStates].state from
[AllStates] left join [FerrariStates] on
[AllStates].state = [FerrariStates].state
。我应该[TelsaStates]
还是left join
或[AllStates]
?还是应该是[FerrariStates]
?
同一问题将适用于inner join
和[ToyotaStates]
。应该是[FordStates]
还是left join
?我应该用哪个表做inner join
?
答案 0 :(得分:4)
假设每个状态最多有一行,您希望left join
到第一个表:
select a.state,
(case when f.state is not null then 1 else 0 end) as is_ferrari,
(case when t.state is not null then 1 else 0 end) as is_tesla,
. . .
from AllStates a left join
FerrariStates f
on f.state = a.state left join
TeslaStates t
on t.state = a.state left join
. . .;
第一个表是AllStates
。那就是人口。后续的联接应该全部从left join
回到AllStates
,以引入每个表中的值。
注意:
case
表达式获取0/1值。