一些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,哪个表承担“左”表的作用? table1总是有“LEFT”表的作用吗?
解决方法
它们按照从上到下的顺序进行处理,所有连接都与先前FROM子句的“整体”相关联.
所有的事情都是平等:
> tab1是带有可选伙伴选项卡2的OUTER JOIN的强制合作伙伴
>以上是OUTER JOIN与可选合作伙伴选项卡4的强制合作伙伴
>以上和tab4都是INNER JOIN中的强制性合作伙伴
>以上是带有可选合作伙伴选项卡5的OUTER JOIN的强制合作伙伴
但是,这个查询的问题
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
INNER JOIN with table3是否使用了“需要”选项卡4的条件,从而使它几乎成为一个强制性的链接,以保留左侧部分的记录,因此总共tab1 / tab4 / tab3必须成功加入,而tab2和tab5是可选的.