on后面是过滤两个链接表笛卡尔积形成中间表的约束条件,where 是对中间表的约束条件。推荐是 ON只进行连接操作,WHERE只过滤中间表的记录。

解决方案 »

  1.   

    这两个值等价的
    select *
      from tab1 t1
      left join tab2 t2 on t1.col1 = t2.col2
     where t2.col2 != 3
    ;
    select*from (
    select *
      from tab1 t1
      left join tab2 t2 on t1.col1 = t2.col2) t1
     where t1.col2 != 3
    ;
    这两个是等价的
    select *
      from tab1 t1
      left join tab2 t2 on t1.col1 = t2.col2
       and t2.col2 != 3
    ;select *
      from tab1 t1,
           tab2 t2 
     where t1.col1 = t2.col2(+)
       and t2.col2(+) != 3
    ;
      

  2.   

    1、SELECT * FROM A LEFT JOIN B ON 条件1 AND 条件2
    2、SELECT * FROM A LEFT JOIN B ON 条件1 WHERE 条件2
    第一个,条件2无论是否成立,都不会影响A表数据的显示。
    第二个,条件2如果不满足,会影响A表数据的显示。