假设我有这个表:
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我想找出cola不等于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
发布于 2017-12-20 06:30:13
可能最简单的方法是使用isnull()包装器,比如:
SELECT * FROM t WHERE isnull(cola,-1) != isnull(colb,-1)
假设这是一张相当小的桌子。在连接一个函数时,有一些潜在的性能警告,就像这样,但在您的情况下可能是可以的?
https://stackoverflow.com/questions/47896046
复制相似问题