我连接表: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也会保留每个表中的所有行。 –