假设我有此表:
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)
假设这是一张相当小的桌子。像这样做的那样,加入功能有一些潜在的性能警告,但也许可以吗?