11

一些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”表的作用吗?

4

1 回答 1

16

它们按从上到下的顺序处理,所有连接都与前面的 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 可选。

于 2012-10-10T11:44:06.597 回答