代码之家  ›  专栏  ›  技术社区  ›  aidan

基本SQL联接查询

  •  1
  • aidan  · 技术社区  · 14 年前

    我有几张桌子:

    事件类型 et )事件 e )活动预订( eb (人) p )个人地址( )和地址“国家”( ac )

    它们的连接方式如下:

    ET & e & 电子束 -gt; -gt; pa -gt; 交流电

    每个连接都有一对一的关系,除了 电子束 -gt; 链接。一行 电子束 可以有 null 而不是来自 .

    我想得到所有的预订,不管是否有相应的行 .

    所以,一个简单的左连接。

    但是哪个更好呢?(还是有更好的方法?)

    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 回复  |  直到 14 年前
        1
  •  1
  •   kristof    14 年前

    我通常使用下面的语法-它在某种程度上对应于您的第二个场景

    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
    

    我不确定性能的影响,但是如果两个场景都生成了相同的查询计划,我不会感到惊讶。

        2
  •  1
  •   mvds    14 年前

    只需使用explain测试您的查询,它将显示是否以及如何使用键。