日期:2014-05-16 浏览次数:20458 次
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 灵活 待后续看是否有什么好的解决方案