2

我正在使用SQL Server 2008 R2。SQL Server和運算符與ON

我正在查詢中,我正在使用左外連接從兩個表中獲取記錄。現在

,查詢是這樣的:

SELECT Table1.Id, Table1.Name, Table2.DeviceId 
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.Id = Table2.Table1Id AND Table2.DeviceId=4 
WHERE Table1.Name LIKE 'xxxxxx' AND Table1.IsDeleted=0 

而且它給我想要的結果。

但是當我使用

SELECT Table1.Id, Table1.Name, Table2.DeviceId 
FROM Table1 
LEFT OUTER JOIN Table2 ON Table1.Id = Table2.Table1Id 
WHERE Table1.Name LIKE 'xxxxxx' AND Table1.IsDeleted=0 AND Table2.DeviceId=4 

它沒有得到所需要的結果。

現在,我沒有得到ON語句和WHERE子句中AND運算符之間的區別?

有人可以解釋一下嗎?

謝謝..

+0

什麼是錯誤的結果? – Szymon

+1

它改變連接謂詞。從邏輯上講,這是在WHERE子句之前應用的。當你在'WHERE'子句中放置'AND Table2.DeviceId = 4'時,你基本上把'LEFT JOIN'變成'INNER JOIN'。 –

+0

@Szymon我沒有得到想要的記錄。 – Dev

回答

2

「據瞭解,與外部連接時,ON和WHERE子句中發揮非常不同的角色,因此,它們是不可互換是非常重要的。WHERE子句仍然扮演着一個簡單的過濾角色 - 即保留真實案例並丟棄錯誤和未知情況,使用類似的東西,並在where子句中使用謂詞,但是,ON子句並不扮演一個簡單的過濾角色,而是更匹配角色。換句話說,無論ON謂詞是否匹配,ON謂詞都會返回保留端的一行,因此ON謂詞只會確定非保留端的哪些行與保留端的行匹配 - 而不是返回從保存的一側排。「 **考試70-461:查詢Microsoft SQL Server 2012