多个外连接语义

时间:2012-10-10 11:29:07

标签: sql sql-server-2008 outer-join

一些SQL代码:

SELECT *
FROM table1 tab1 
   LEFT OUTER JOIN table2 tab2 ON (tab1.fg = tab2.fg)
   LEFT OUTER JOIN table4 tab4 ON (tab1.ss = tab4.ss)
   INNER JOIN table3 tab3 ON (tab4.xya = tab3.xya)
   LEFT OUTER JOIN table5 tab5 ON (tab4.kk = tab5.kk)

我知道不同类型的JOIN会做什么,但我想知道的是:对于每个JOIN,哪个表承担“LEFT”表的角色? table1总是会扮演“LEFT”表的角色吗?

1 个答案:

答案 0 :(得分:14)

它们按从上到下的顺序处理,连接都与先前FROM子句的“整体”相关联。

一切都是平等的:

  • tab1是OUTER JOIN与可选合作伙伴tab2
  • 的强制合作伙伴
  • 以上是OUTER JOIN与可选合作伙伴tab4
  • 的强制性合作伙伴
  • 以上和tab4都是INNER JOIN的强制性合作伙伴
  • 以上是OUTER JOIN的强制性合作伙伴以及可选的合作伙伴tab5

但是,此查询存在问题

SELECT *
FROM table1 tab1 
LEFT OUTER JOIN table2 tab2 ON tab1.fg = tab2.fg
LEFT OUTER JOIN table4 tab4 ON tab1.ss = tab4.ss
INNER JOIN table3 tab3 ON tab4.xya = tab3.xya
LEFT OUTER JOIN table5 tab5 ON tab4.kk = tab5.kk

是否带有table3的INNER JOIN使用需要tab4参与的条件,使其实际上成为从左侧部分保留记录的必需链接,因此总共tab1 / tab4 / tab3必须成功加入,使用tab2和tab5可选。