SQL查询返回错误结果

时间:2019-07-08 09:12:37

标签: mysql sql

我的表中有一个名为'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";
}

我没有得到空的结果集。 谁能告诉我问题出在哪里?

谢谢。

5 个答案:

答案 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

此外,您不能使用!=反转子句,在这种情况下,您需要使用<>。