返回两行不相等的值

时间:2010-10-12 18:51:49

标签: sql sql-server

我正在尝试返回两列不相等的查询结果。

但是,当我运行查询时,结果似乎与实际数据不一致。

如下所示,我想返回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)

2 个答案:

答案 0 :(得分:4)

Null是“未知”。任何针对未知(包括NOT)的函数都会返回未知。要返回一行,您的条件必须返回TRUE。

使用IS NULLIS 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)