比较包含空的列



假设我有此表:

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

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

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

假设这是一张相当小的桌子。像这样做的那样,加入功能有一些潜在的性能警告,但也许可以吗?

最新更新