我有以下查询,我想将所有活跃员工拉到他们的CardStatus<> “失落的卡片”。
SELECT
dbo_Employee.Status,
dbo_EmpBadgeNumbers.EmployeeID_FK,
dbo_EmpBadgeNumbers.CardID,
dbo_EmpBadgeNumbers.CardStatus
FROM dbo_Employee INNER JOIN dbo_EmpBadgeNumbers
ON dbo_Employee.EmployeeID = dbo_EmpBadgeNumbers.EmployeeID_FK
WHERE (((dbo_Employee.Status) = "Active")
AND ((dbo_EmpBadgeNumbers.CardStatus) <> "Lost Card"));
如果我更换&lt;&gt; “失落的卡片”和“丢失的卡片”有效,
如果我更换&lt;&gt; “丢失的卡片”是null它可以工作(这给出了我正在寻找的结果)
如果我更换&lt;&gt; “失落的卡片”并非无效。
无论出于何种原因,它都不喜欢“&lt;&gt;”。是的我知道我可以使用“is null”方案来获得相同的结果,我很好奇为什么&lt;&gt;不管用。如果重要,则查询从链接的ODBC连接拉到sql server。
答案 0 :(得分:4)
将Null与任何内容进行比较只会返回Null:
?Null<>"Lost Card"
Null
?Null="Lost Card"
Null
您需要在标准中对Null进行明确检查:
WHERE (CardStatus <> "Lost Card" Or CardStatus Is Null)
答案 1 :(得分:1)
然后我会尝试
CardStatus is null
OR NOT ( CardStatus = "Lost Card" )
原始的NOT CardStatus =“丢失的卡片”不会等同于
(NOT CardStatus) = "Lost Card"
因为它的基本类型是字符的类型所以将基于“=”进行比较,然后应用逻辑NOT ...例如
NOT (CardStatus = "Lost Card")
答案 2 :(得分:1)
&LT;&GT;永远不会与Null合作。
不正确: WHERE CardStatus&lt;&gt;空
正确: WHERE CardStatus不为空
答案 3 :(得分:1)
我假设您在CardStatus中有两个值:“LostCard”和null
(空)
基本上,当您对null
进行任何比较时,结果始终是null
,并且始终是失败的。这就是创建isNull的原因。