假设我有这张表:
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)
有更简洁的方法吗?
答案 0 :(得分:2)
可能最简单的方法是使用isnull()包装器,比如说:
SELECT * FROM t WHERE isnull(cola,-1)!= isnull(colb,-1)
假设这是一个相当小的表。加入一个函数有一些潜在的性能警告,就像这样做,但也许在你的情况下它可以吗?