我連接表:OLD和NEW我的OUTER JOIN查詢的WHERE子句有什麼問題?
表:OLD
Employee_Name Status
Ann Y
Bob Y
Carol
Doug Y
Ellen
Frank
表:NEW
Employee_Name Status
Ann Y
Bob
Carol
Ellen
Frank
我能得到我想要與此連接的輸出:
SELECT Old.Employee_Name AS [OldName]
,New.Employee_Name AS [NewName]
,Old.Status AS [OldStatus]
,New.Status AS [NewStatus]
FROM Old
FULL OUTER JOIN New ON Old.Employee_Name = New.Employee_Name
這是:
OldName NewName OldStatus NewStatus
Ann Ann Y Y
Bob Bob Y
Carol Carol
Doug Y
Ellen Ellen
Frank Frank
現在我想爲查詢添加一個過濾器,以便它只保留新舊狀態不同的行。
如果我嘗試:
SELECT Old.Employee_Name AS [OldName]
,New.Employee_Name AS [NewName]
,Old.Status AS [OldStatus]
,New.Status AS [NewStatus]
FROM Old
FULL OUTER JOIN New ON Old.Employee_Name = New.Employee_Name
WHERE Old.Status <> New.Status
...它沒有提供正確的輸出。
在這個例子中,我認爲它會給輸出:
OldName NewName NewStatus OldStatus
Bob Bob Y
...並不能與道格返回行。
爲什麼會這樣有所作爲? 'ON'和'WHERE'使用相同的比較規則。您仍將null與非null進行比較,這會導致行不被返回。 – Codeman
@ Pheonixblade9。 。 。你似乎不瞭解外連接如何工作。 'where'過濾結果。即使條件計算結果爲false,on也會保留每個表中的所有行。 –