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