代码之家  ›  专栏  ›  技术社区  ›  kjmerf

比较包含Null的列

  •  1
  • kjmerf  · 技术社区  · 8 年前

    假设我有这张桌子:

    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

    1 回复  |  直到 8 年前
        1
  •  2
  •   ben    8 年前

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

    从t中选择*其中isnull(cola,-1)!=isnull(colb,-1)

    假设这是一张相当小的桌子。加入一个函数有一些潜在的性能注意事项,就像这样做的,但在您的情况下是否可以?