一些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”表的角色吗?
答案 0 :(得分:14)
它们按从上到下的顺序处理,连接都与先前FROM子句的“整体”相关联。
一切都是平等的:
但是,此查询存在问题
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可选。