多个外连接语义

How*_*wie 9 sql outer-join sql-server-2008

一些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)
Run Code Online (Sandbox Code Playgroud)

我知道不同类型的JOIN会做什么,但我想知道的是:对于每个JOIN,哪个表承担"LEFT"表的作用?将table1永远具有"LEFT"表的作用?

Ric*_*iwi 14

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

所有的事情都是平等:

  • tab1是带有可选伙伴tab2的OUTER JOIN的强制合作伙伴
  • 以上是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
Run Code Online (Sandbox Code Playgroud)

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