我有几张桌子:
event_type(et
),事件(e
),event_booking(eb
),person(p
),person_address(p
)和address_country( ac
)
他们是这样加入的:
et
< - e
< - eb
- > p
- > pa
- > ac
每个联接都有一对一的关系,eb
- >除外。 p
链接。 eb
中的一行可以有null
而不是来自p
的ID。
我希望得到所有预订,无论p
中是否有相应的行。
所以,一个简单的左连接。
但哪个更好? (或者有更好的方法吗?)
et J e J eb LJ p LJ pa LJ ac
(我假设这与ac J pa J p RJ eb RJ e RJ et
的处理相同?)
或
et J e J eb LJ (p J pa J ac)
(即左加入子选择)
答案 0 :(得分:1)
只需使用EXPLAIN测试您的查询,它将显示是否以及如何使用密钥。
答案 1 :(得分:1)
我通常使用以下语法 - 它以某种方式对应于您的第二个场景
select
*
from
eb
inner join e on eb.eId = e.eId
inner join et on e.etId = et.etId
left join p
inner join pa on p.paId = pa.paId
inner join ac on pa.acId = ac.acId
on eb.pId = p.pId
我不确定性能影响,但如果两个方案都生成相同的查询计划,我也不会感到惊讶