sql server關於left join的記錄

現有approve和projectReg兩張表,沒有物理外鍵。

approve: businessCode,  type

projectReg: projectId

select * 
from projectReg a LEFT JOIN approve b  
on a.projectRegId = b.businessCode
select *
from approve a LEFT JOIN projectReg b
on a.businessCode=b.projectRegId
都會報錯:[Err] 22018 - [SQL Server]在將 varchar 值 '3ad045bd10c1482d962ec944bca21056' 轉換成數據類型 int 時失敗。

select * 
from projectReg a LEFT JOIN approve b  
on a.projectRegId = b.businessCode and b.type=5

不報錯

select * 
from projectReg a LEFT JOIN approve b  
on a.projectRegId = b.businessCode 
-- and b.type=5
where b.type=5
將過濾被連接的表的條件放到where中,同樣不報錯

select *
from approve a LEFT JOIN projectReg b
on a.businessCode=b.projectRegId and a.type=5
報錯:[Err] 22018 - [SQL Server]在將 varchar 值 '3ad045bd10c1482d962ec944bca21056' 轉換成數據類型 int 時失敗。

select *
from approve a LEFT JOIN projectReg b
on a.businessCode=b.projectRegId 
-- and a.type=5
where a.type=5
這樣也不報錯


更有意思的是:

select *
from approve a LEFT JOIN projectReg b
on a.businessCode=b.projectRegId 
and a.type=5
where a.type=5
居然也不報錯,很無奈啊!!!!


總結:

僅僅嘗試了sql server

1.網上關於on和where條件是先生成臨時表再用where去過濾的情況,在sql server中是不成立的。

2.關於對主表的條件過濾,應該放到where中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章