本帖最后由 wully224 于 2009-07-08 17:02:16 编辑

解决方案 »

  1.   

    从结果来看:sql1中, a.depid =4     4是左,a.depid是右
    SQL2中,4=a.depid       4是右,a.depid是左
      

  2.   

    应该是一样的,都是作为ON的连接条件left join 跟表的前后顺序有关系
      

  3.   

    select t.*, a.* from employees t 
    left join 
    (select * from departments where 4=depid ) a
     on 
    t.delflag = a.delflag 
    where t.depid = 4 or t.depid is null 4=depid 不是和employees 关联的条件,最好不要写在一起
    另外,t.delflag = a.delflag这个条件有点搞了
      

  4.   


    这个是我为了测试加上去的代码
    因为项目中,整段sql比较复杂,所以就随便造了一个
    你的意思,是不是红色部分的条件跟T表无关,所以不应该写在on后面??
      

  5.   

    只是建议的写法,谈不到应该
    ------------------------------
    一个例子应该可以看出来
    test_abc 
    a
    1
    2
    3select * from test_abc a,
    (select 1 a from dual) b
    where a.a(+)=b.a  --left join (id=4)
    结果
    1 1 select * from test_abc a,
    (select 1 a from dual) b
    where a.a=b.a (+) --left join (4=id)
       结果
    1 1
    2