日期:2014-05-16  浏览次数:21070 次

关于数据库外连接中的ON条件的先后顺序区别
最近在一项目中使用了数据库的左外连的一个情况:

比如 : select * from A 
  LEFT JOIN B 
  ON A.field = B.field
  和
  select * from A 
  LEFT JOIN B 
  ON B.field = A.field

上面这两条语句的区别(ON 的前后顺序区别)。

在这之前,个人一直以为是没有区别的,但这次领导对我说是有区别的,网上一直没查到到底有什么区别,郁闷中。。

大家来说说这两句到底有什么区别。。


------解决方案--------------------
1、首先要明白sql的执行的顺序的,首先执行from表,然后再on后表的条件,然后在左连接。
2、另外条件决先连接表中那个字段,具体还是要看一下执行计划的。
------解决方案--------------------
具体就是看执行计划,就知道区别在那了。
------解决方案--------------------
探讨
1、首先要明白sql的执行的顺序的,首先执行from表,然后再on后表的条件,然后在左连接。
2、另外条件决先连接表中那个字段,具体还是要看一下执行计划的。

------解决方案--------------------
应该是,对数据筛选有先后,执行效率问题吧
------解决方案--------------------
............路过
------解决方案--------------------
对于CBO的ORACLE来说,A.field = B.field 和B.field = A.field是完全一样的。

但是你需要确定的是,你领导是不是说下面的SQL有区别:)

select * from A
LEFT JOIN B
ON A.field = B.field

select * from B
LEFT JOIN A
ON B.field = A.field
------解决方案--------------------
探讨
应该是,对数据筛选有先后,执行效率问题吧

------解决方案--------------------
探讨
引用:
应该是,对数据筛选有先后,执行效率问题吧

支持这个观点