我试图根据以下内容添加条件:
where new.Number <> old.Number
and new.Number is not null
这会选择具有已更改数字的行&#39;只要新号码&#39;不是空白
我想添加另一个条件,可以用作&#39; OR&#39;的另一面。但我很困惑如何做到这一点,我的大脑说:
where (((new.Number <> old.Number) and new.Number is not null) or (new condition))
因此,我们会选择通过先前条件的行或传递新条件,但这似乎不起作用。
答案 0 :(得分:2)
修订答案
假设您 DO 想要包含涉及NULL的结果,您有两个选择:
选项1
智能地使用 OR
条款:
WHERE old.Number IS NULL OR old.Number <> new.Number
匹配如果:
这在所有其他情况下都不匹配,包括:
选项2
使用ISNULL
函数比较NULL值,如下所示:
WHERE ISNULL(new.Number, -1) <> ISNULL(old.number, -1)
匹配如果:
1 <> 2
)1 <> NULL
和NULL <> 2
)如果符合以下条件,则不匹配:
1 <> 1
)NULL <> NULL
)在任何情况下,当您混合使用AND和OR子句时,可以使用(
和)
。
答案 1 :(得分:0)
也许你可以将第一个条件重写为WHERE new.Number NOT IN(null,old.Number),使其成为单个表达式,这可以使'OR'更容易。
另外,在没有新条件的情况下,您是否完全确定该功能是否正确? 对我们来说,无法检查,因为没有关于您选择的表的上下文。
答案 2 :(得分:0)
你可以尝试这个...... WHERE(new.Number&lt;&gt; old.Number AND new.Number IS NOT NULL)或(新条件)
答案 3 :(得分:0)
如前所述,您可以合并原始条件以删除is not null
。但是,我仍然希望明确这个意图,因此我更喜欢这种模式:
coalesce(new.Number, old.Number) <> old.Number
这使得未来的维护者更清楚地明确考虑了你想用NULL值做什么,它仍然会将你压缩到一个你可以轻松地与ar OR
结合的表达式。
但是在将来,如果你有更复杂的条件不能巩固,只需记住你的括号:
WHERE ( new.Number <> old.Number and new.Number is not null )
OR ( other condition )