1and和where的濫用用的時候請多注意
下面的三段代碼的效果肯定是不一樣的
(1)
復制代碼 代碼如下:
selectA.a1,B.b3
fromAleftjoinB
onA.a2=B.b2
whereA.a3=1
andB.b3=2
先左關聯后在過濾假如關聯的結果里面B.b3=null那么你在where后面在加B.b3=2那么結果中B.b3肯定是沒有null的情況的
(2)
復制代碼 代碼如下:
selectA.a1,B.b3
fromAleftjoinB
onA.a2=B.b2
andB.b3=2
whereA.a3=1
關聯前先過掉B的b3=2的條件然后再左關聯起來那么這個結果可能B.a3會有null的情況的
(3)
復制代碼 代碼如下:
selectA.a1,B.b3
fromAleftjoinB
onA.a2=B.b2
andB.b3=2
andA.a3=1
關聯前先過掉B中的B3=2和A中的a3=1條件然后再關聯起來那么這個結果可能B.b3會有null的情況的
所以大家在用where和and的時候放的位置請多注意了
2用+進行左關聯缺陷也許可以有解決方案待后續(xù)
(1)
復制代碼 代碼如下:
selectA.a1,B.b3
fromA,B
whereA.a2=B.b2(+)
andA.a3(+)=1
andB.b3(+)=2
這個條件應該是和1里面的(1)的情況一樣
先左關聯后在過濾假如關聯的結果里面B.b3=null那么你在where后面在加B.b3=2那么結果中B.b3肯定是沒有null的情況的
也就是說用+進行左關聯沒有用leftjoin靈活待后續(xù)看是否有什么好的解決方案