比较包含NULLS

时间:2017-12-19 22:21:57

标签: sql-server

假设我有这张表:

CREATE TABLE t (id int, cola int, colb int);
INSERT INTO t VALUES (1, 1, 1), (2, 1, 2), (3, 1, NULL), (4, NULL, 4);

    id  cola    colb
1   1   1       1
2   2   1       2
3   3   1       NULL
4   4   NULL    4

我想找到可乐不等于colb的行。我希望在写作时返回2-4行:

SELECT * FROM t WHERE cola != colb

但是只返回第二行。为了拉行2-4,我必须写:

SELECT * FROM t
WHERE cola != colb
OR (cola IS NULL AND colb IS NOT NULL)
OR (cola IS NOT NULL AND colb IS NULL)

有更简洁的方法吗?

在这里测试:http://rextester.com/VJYFX19301

1 个答案:

答案 0 :(得分:2)

可能最简单的方法是使用isnull()包装器,比如说:

SELECT * FROM t WHERE isnull(cola,-1)!= isnull(colb,-1)

假设这是一个相当小的表。加入一个函数有一些潜在的性能警告,就像这样做,但也许在你的情况下它可以吗?

相关问题