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

And,Where使用提示以及用+进行左关联的提示

 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 灵活 待后续看是否有什么好的解决方案