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的行而不测试其他所有可能性?
答案 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"