日期:2014-05-16 浏览次数:20525 次
 1 and 和where的滥用 用的时候 请多注意
           
           下面的三段代码的效果肯定是不一样的            
           (1) select A.a1 ,B.b3
            from A left join B
            on A.a2=B.b2 
            where A.a3=1
            and B.b3=2 
            先左关联后 在过滤 假如关联的结果里面B.b3=null 那么 你在where后面在加B.b3=2 那么结果中B.b3肯定是没有null的情况的 
           (2) select A.a1 ,B.b3
            from A left join B
            on A.a2=B.b2 
            and B.b3=2 
            where A.a3=1 
           关联前 先过掉B的b3=2的条件 然后再左关联起来 那么这个结果可能B.a3会有null的情况的 
           (3) select A.a1 ,B.b3
            from A left join B
            on A.a2=B.b2 
            and B.b3=2 
            and A.a3=1 关联前 先过掉B中的B3=2和A中的a3=1条件 然后再关联起来 那么这个结果可能B.b3会有null的情况的 
所以大家在用where 和and 的时候 放的位置 请多注意了
        2 用+进行左关联 缺陷 也许可以有解决方案 待后续
         
          (1) select A.a1 ,B.b3
            from A , B
            where A.a2=B.b2(+) 
            and A.a3(+)=1
            and B.b3(+)=2 
            这个 条件 应该是 和 1里面的(1)的情况一样 
           先左关联后 在过滤 假如关联的结果里面B.b3=null 那么 你在where后面在加B.b3=2 那么结果中B.b3肯定是没有null的情况的 
            也就是说 用+进行左关联没有用left join 灵活 待后续看是否有什么好的解决方案