【发布时间】:2011-02-17 01:14:58
【问题描述】:
我希望在我的查询中防止非 sargable 表达式,这是检查 null 条件的更好方法吗?
AND c.Account IS NOT NULL
AND c.Account <> ''
或
AND ISNULL(c.Account,'') <> ''
我突然意识到Account 来自LEFT JOIN,所以它可能为空。我想要它们只相交的情况,这意味着我真的应该只使用INNER JOIN 吧?谢谢你的脸;)
但是,忽略了令人作呕的自我实现,我仍然想知道在我无法将 Account 设为 NOT NULL 列的一般情况下的答案。
【问题讨论】:
-
最好将Account字段设置为NOT NULL,因为这些值对您的意义相同,最好使用COALESCE,因为它是SQL标准的一部分。
-
空字符串等价于 NULL ?哎呀!
-
@lukled ~ 所以在哪里使用 COALESCE 会更好?
-
@Lukled:NULL 不是一个值。 Null 表示未知或缺失。空字符串意味着你知道它并且它是空的。
-
@Mitch Wheat:告诉 Oracle 的工程师:) 在 Oracle 中,空字符串等于 null。
标签: sql-server tsql isnull