摘要:left join 時,如果要對右邊table做欄位篩選,將篩選條件加在on跟where的差別。
我工作上比較常用的是inner join跟left join,
這篇要講的重點是在left join 時,如果要對右邊table做欄位篩選,將篩選條件加在on跟where的差別。
直接用範例說明:
TableA:
TableB:
看一下基本的left join on語法:
Select tbA.Eid,
tbB.Col1
From dbo.TableA tbA
left join dbo.TableB tbB
on tbA.Eid=tbB.Eid
出現的結果是:
left join on 加入篩選條件TableB的Col=2
狀況一:Col=2加在where後面
Select tbA.Eid,
tbB.Col1
From dbo.TableA tbA
left join dbo.TableB tbB
on tbA.Eid=tbB.Eid
where tbB.Col1=2
出現的結果是:
狀況二:Col=2加在on後面
Select tbA.Eid,
tbB.Col1
From dbo.TableA tbA
left join dbo.TableB tbB
on tbA.Eid=tbB.Eid and tbB.Col1=2
出現的結果是:
P.S. inner join時,狀況一跟狀況二出現的結果會是一樣的。
結論:
在做left join時,如果要對TableB的某個欄位做篩選,
(一)加在where後面:對join好的table做篩選
(二)加在on後面:在join時,先對TableB做篩選
如果小弟有講的不對的地方,請指正我,謝謝~