"!="/NOT 可能在 SQLite 中无法正常工作
"!="/NOT perhaps not working properly in SQLite
我有一个 table 大约有一百行。它有一个包含 1、0 或 NULL 的列 is_gallery。如果我这样做...
SELECT * WHERE is_gallery != 1
或
SELECT * WHERE NOT (is_gallery = 1)
它排除了 is_gallery 为空的行。如果我这样做,我可以设法得到适当的回应
SELECT * WHERE (is_gallery = 0 OR is_gallery is null)
但是“!=”或“NOT”不应该起作用吗?有没有办法只 return is_gallery 不等于 1 的行而不测试所有其他可能性?
您可以使用 IS
and IS NOT
运算符代替 =
和 !=
。这些将 NULL
视为正常值。
SELECT * FROM yourTable WHERE is_gallery IS NOT 1
最好使用的是 coalesce
,如:
SELECT *
WHERE coalesce(is_gallery,0) != 1;
coalesce
的作用是用第二个参数替换该列中的任何空值。在上面的示例中,"is_gallery" 列中的任何空值在与 1 进行比较之前将被替换为 0。当然 return 也是如此。
在 NULL
上意识到 NULL
值不等于任何东西 - 甚至不等于 NULL 本身。它无法比较 - 所以当 "comparing" 时,它总是 return FALSE。在 NULL 上,它有一个特殊的运算符,即 "IS NULL"
或 "IS NOT NULL"
我有一个 table 大约有一百行。它有一个包含 1、0 或 NULL 的列 is_gallery。如果我这样做...
SELECT * WHERE is_gallery != 1
或
SELECT * WHERE NOT (is_gallery = 1)
它排除了 is_gallery 为空的行。如果我这样做,我可以设法得到适当的回应
SELECT * WHERE (is_gallery = 0 OR is_gallery is null)
但是“!=”或“NOT”不应该起作用吗?有没有办法只 return is_gallery 不等于 1 的行而不测试所有其他可能性?
您可以使用 IS
and IS NOT
运算符代替 =
和 !=
。这些将 NULL
视为正常值。
SELECT * FROM yourTable WHERE is_gallery IS NOT 1
最好使用的是 coalesce
,如:
SELECT *
WHERE coalesce(is_gallery,0) != 1;
coalesce
的作用是用第二个参数替换该列中的任何空值。在上面的示例中,"is_gallery" 列中的任何空值在与 1 进行比较之前将被替换为 0。当然 return 也是如此。
在 NULL
上意识到 NULL
值不等于任何东西 - 甚至不等于 NULL 本身。它无法比较 - 所以当 "comparing" 时,它总是 return FALSE。在 NULL 上,它有一个特殊的运算符,即 "IS NULL"
或 "IS NOT NULL"