Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询返回错误的结果_Mysql_Sql - Fatal编程技术网

Mysql SQL查询返回错误的结果

Mysql SQL查询返回错误的结果,mysql,sql,Mysql,Sql,我的表中有一列名为“process”,它是布尔类型,默认值为NULL。当我将所有行的“process”值设置为NULL并执行查询时 SELECT * FROM `tablename` WHERE `process` != 1 MySQL返回一个空的结果集。当我这样做的时候,我也得到了同样的结果 SELECT * FROM `tablename` WHERE `process` = NULL 此外,当我使用PHP打印行时 $result = mysqli_query($conn, "SELEC

我的表中有一列名为“process”,它是布尔类型,默认值为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";
}
我没有得到一个空的结果集。 谁能给我解释一下问题出在哪里


谢谢。

要获取具有
空值的记录

您应该使用
isnull()
而不是column=NULL

SELECT * FROM `tablename` WHERE ISNULL(`process`);

您可以使用
IS NULL

SELECT * FROM tablename WHERE process IS NULL

如果将逻辑false定义为布尔列不等于1(表示0或
NULL
),则应使用此逻辑:

SELECT *
FROM tablename
WHERE process <> 1 OR process IS NULL;
启动SQL时:

SELECT * FROM `tablename` WHERE `process` != 1
结果集返回为空,因为这将查找没有值“1”的记录。NULL不是一个值

SELECT * FROM `tablename` WHERE `process` = NULL
这听起来完全错误,因为我已经告知“NULL”不是一个值。当然,这是你尝试应用的错误方法

简而言之,NULL不是一个值,因此它不能等于或不等于任何东西它与0不同,0是一个值

检查以更好地理解


希望这对你有帮助

Null不是列可以具有的值。它更像一种状态,因此你需要写作

SELECT * FROM `tablename` WHERE `process` IS NULL

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

我认为第二个查询应该类似于
SELECT*FROM tablename,其中process为NULL
process1
可能的重复。有人能解释一下这个答案的错误吗?-谁投了反对票?为什么不处理呢1
工作?我认为这两个符号之间的唯一区别是标准,而不是。@CassieLiu事实上
=
在逻辑上是等价的;没有区别。
NULL
是数据库字段中缺少值,不能比较NULL值本身。这有意义吗?“这是你对更多差异的回答。@Ghanshyambava我刚刚编辑了这个问题。你能再看一下吗?
SELECT * FROM `tablename` WHERE `process` IS NULL