“!=”/ NOT在SQLite中可能无法正常工作

时间:2015-01-31 20:36:25

标签: sql sqlite

我有一张约有一百行的桌子。它有一个包含1,0或NULL的列is_gallery。如果我这样做......

 SELECT * WHERE is_gallery != 1

 SELECT * WHERE NOT (is_gallery = 1)

它排除了is_gallery为null的行。如果我这样做,我可以设法得到适当的回应

 SELECT * WHERE (is_gallery = 0 OR is_gallery is null)

但不应该“!=”或不工作?有没有办法只返回is_gallery不等于1的行而不测试其他所有可能性?

2 个答案:

答案 0 :(得分:3)

您可以使用IS and IS NOT运算符代替=!=。这些将NULL视为正常值。

SELECT * FROM yourTable WHERE is_gallery IS NOT 1

答案 1 :(得分:0)

最好用的是coalesce,如:

SELECT * 
WHERE coalesce(is_gallery,0) != 1;

coalesce的作用是用第二个参数替换该列中的任何空值。在上面的示例中," is_gallery"中的任何空值都是如此。在与1进行比较之前,将替换为0。因此,当然会返回true。

NULL上意识到NULL值不等于ANYTHING - 甚至不是NULL本身。它无法比较 - 所以当"比较"时,它总是会返回FALSE。在NULL上,它有一个特殊的运算符"IS NULL""IS NOT NULL"