T-SQL - left join 時對右邊table做欄位篩選

  • 56357
  • 0
  • 2011-04-21

摘要: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做篩選

 

如果小弟有講的不對的地方,請指正我,謝謝~