我正在尝试返回两列不相等的查询结果。
但是,当我运行查询时,结果似乎与实际数据不一致。
如下所示,我想返回RatePlanID不同的行。
RatePlans_Supplemental.PIDs
实际上可能为null,但我从未看到null结果。它还返回重复项。
我已经尝试了多个查询,他们似乎都做了同样的事情。
我实际上已经验证了它返回了错误的数据。这就像查询正在插入值,如果有空值。知道为什么吗?
Update Billing_UnitUsage
Set SuppRateSuccess = 0
FROM Billing_UnitUsage INNER JOIN
RatePlans_Supplemental ON Billing_UnitUsage.SupplementalRateID = RatePlans_Supplemental.UDC_ID AND
NOT(Billing_UnitUsage.RatePlanID = RatePlans_Supplemental.PIDs)
答案 0 :(得分:4)
Null是“未知”。任何针对未知(包括NOT)的函数都会返回未知。要返回一行,您的条件必须返回TRUE。
使用IS NULL
和IS NOT NULL
来测试NULL。
这是我的比喻。
如果房间里有两个陌生人,你问,他们的名字是否相同?答案是未知的。
如果你问,他们的名字不一样吗?答案是未知的。
不知道他们的名字,不幸的是,答案总是未知。
答案 1 :(得分:1)
我添加了表别名只是为了提高可读性。
如果您不想在SuppRateSuccess
为NULL时更新PIDs
:
Update bu
Set SuppRateSuccess = 0
FROM Billing_UnitUsage bu
INNER JOIN RatePlans_Supplemental rs
ON bu.SupplementalRateID = rs.UDC_ID
WHERE bu.RatePlanID <> ISNULL(rs.PIDs, bu.RatePlanID)
如果您确实希望在SuppRateSuccess
为空时更新PIDs
(假设为RatePlanID
&lt;&gt; 0):
Update bu
Set SuppRateSuccess = 0
FROM Billing_UnitUsage bu
INNER JOIN RatePlans_Supplemental rs
ON bu.SupplementalRateID = rs.UDC_ID
WHERE bu.RatePlanID <> ISNULL(rs.PIDs, -bu.RatePlanID)