【问题标题】:Multiple outer joins semantics多个外连接语义
【发布时间】:2012-09-30 20:38:44
【问题描述】:

一些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”表的角色吗?

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

  • “万物平等”是什么意思?在这种情况下,不是“所有事物都平等”的例子是什么?
  • 等式比较中的列顺序是否重要?
猜你喜欢
  • 1970-01-01
  • 2021-03-13
  • 2016-03-22
  • 2011-12-30
  • 2015-02-05
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多