NULL!= mysql查询中的NULL

时间:2015-02-17 03:31:24

标签: mysql

我正在尝试查看字段是否相同的查询。但是,只要字段为NULL,它就会返回错误结果。我甚至尝试用柱本身做同样的事情:

SELECT * FROM `mturk_completion` WHERE (`mturk_completion`.`imdb_url` =  
`mturk_completion`.`imdb_url` AND `mturk_completion`.`worker_id` = 'A3NF84Q37D7F35' )

它只返回列不为NULL的结果。为什么会如此,我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

您的标题对于任何SQL实现(不仅仅是MySQL)都是完全正确的。 NULL 不等于(包括其他NULL)。

您需要使用明确的IS NULL检查或COALESCE() function (or its RDBMS-dependent alternatives)来设置NULL的默认值。

答案 1 :(得分:4)

您对mturk_completion.imdb_url与其自身的比较是多余的,并且应始终返回True,除非mturk_completion.imdb_url为空时,在这种情况下它将返回Null。

这是因为运营商=在进行比较时会返回TrueFalseNull,当两个运算符中的任何一个为空时

试试这个来说明情况。

SELECT 1 = NULL; -- returns NULL
SELECT 1 != NULL; -- also return NULL
SELECT ISNULL(1 = NULL); -- returns 1
SELECT ISNULL(1 != NULL); -- returns 1

如果你像下面那样重写你的查询,你忽略NULL的问题就会消失:

SELECT * FROM `mturk_completion` WHERE worker_id = 'A3NF84Q37D7F35'

答案 2 :(得分:1)

我认为你可以使用

(table.Field =  table2.Field OR COALESCE(table.Field, table2.Field) IS NULL)