最近在一项目中使用了数据库的左外连的一个情况:比如 : select * from A 
       LEFT JOIN B 
       ON A.field = B.field
   和
       select * from A 
       LEFT JOIN B 
       ON B.field = A.field上面这两条语句的区别(ON 的前后顺序区别)。在这之前,个人一直以为是没有区别的,但这次领导对我说是有区别的,网上一直没查到到底有什么区别,郁闷中。。大家来说说这两句到底有什么区别。。

解决方案 »

  1.   

    1、首先要明白sql的执行的顺序的,首先执行from表,然后再on后表的条件,然后在左连接。
    2、另外条件决先连接表中那个字段,具体还是要看一下执行计划的。
      

  2.   


    就是先执行from A ,然后执行on后的条件A.field = B.field 在然后是左连接LEFT JOIN B  查询的表名、带的条件、、、、这些都跟你放的位置是有关系的,需要看你的具体情况,好比有多跟一的字段显示,你是用一查多还是多查一呢
      

  3.   

    对于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
      

  4.   

    不是哟,就是ON的左右两边位置调换,oracle的
      

  5.   

    这两天疯狂查询了一下,发现有这种说法:ON 的左右两边有的区别的。 大概是这样的:on 从表.field = 主表.field就是说主表的字段要写在ON的右边。不知道这样的说法对不对