基本SQL连接查询

时间:2010-08-10 10:23:06

标签: sql mysql

我有几张桌子:

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)(即左加入子选择)

2 个答案:

答案 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

我不确定性能影响,但如果两个方案都生成相同的查询计划,我也不会感到惊讶