我的表中有一个名为'process'的列,它是BOOLEAN类型,默认情况下为NULL。当我将所有行的'process'值设置为NULL并执行查询
SELECT * FROM `tablename` WHERE `process` != 1
MySQL返回空结果集。
SELECT * FROM `tablename` WHERE `process` = NULL
此外,当我使用PHP打印出
之类的行时$result = mysqli_query($conn, "SELECT * FROM log");
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
if ($row['process'] != 1)
echo $row['time']." ".$row['event']."\n";
}
我没有得到空的结果集。 谁能告诉我问题出在哪里?
谢谢。
答案 0 :(得分:2)
当您启动SQL时:
SELECT * FROM `tablename` WHERE `process` != 1
返回的结果集为空,因为这将查找没有值'1'的记录。 NULL不是值
SELECT * FROM `tablename` WHERE `process` = NULL
这听起来是完全错误的,因为我已经告知'NULL'不是值。当然,这是您尝试应用的错误方法。
简而言之,NULL不是值,因此它不能等于=或不等于!=任何东西。它与作为值的零0不同。
检查like以获得更好的理解。
希望这对您有所帮助!
答案 1 :(得分:0)
要获取具有NULL
值的Record,
您应该使用isnull()
而不是column = NULL
SELECT * FROM `tablename` WHERE ISNULL(`process`);
答案 2 :(得分:0)
您可以使用IS NULL
SELECT * FROM tablename WHERE process IS NULL
答案 3 :(得分:0)
如果您将逻辑列定义为布尔值不等于1(表示0或NULL
),则应使用以下逻辑:
SELECT *
FROM tablename
WHERE process <> 1 OR process IS NULL;
您还可以使用WHERE
稍微合并COALESCE
子句:
SELECT *
FROM tablename
WHERE COALESCE(process, 0) <> 1;
答案 4 :(得分:-1)
Null不是列可以具有的值。它更像一个状态,因此您需要编写
SELECT * FROM `tablename` WHERE `process` IS NULL
此外,您不能使用!=反转子句,在这种情况下,您需要使用<>。