在SQL Server 2008中,我运行以下SQL:
SELECT id, old_tgt_price, new_tgt_price
FROM inst i
WHERE inst_id IN (281, 229)
AND is_latest = 1
具有以下结果:
id old_tgt_price new_tgt_price
4492 462 NULL
4487 2700 2500
那里没有错。如果我添加一个检查旧价格和新价格不相等(同时期望某些值为NULL):
SELECT id, old_tgt_price, new_tgt_price
FROM inst i
WHERE inst_id IN (281, 229)
AND is_latest = 1
AND (isnull(old_tgt_price, 0) != isnull(new_tgt_price, 0))
我得到了相同的结果。对于id为4492的记录,AND(isnull(old_tgt_price,0)!= isnull(new_tgt_price,0))子句肯定会失败。
为什么记录4492仍然在第二个结果集中返回?
答案 0 :(得分:2)
底部添加的声明是说选择该行if old_tgt_price!= new_tgt_price并且如果它们为null,则将它们都更改为0。 old_tgt_price不为null,因此其值为462.new_tgt_price为null,因此它的值为0.它们不相等,因此它会打印结果。
你想做什么?你不想让它打印出空结果吗?
答案 1 :(得分:0)
您的null
将更改为0,因此您的情况将如下所示:462!= 0,即TRUE