希望这个问题不太笼统。在网站上或SQL文档中找不到任何内容:
在编码时,我对此进行了测试,但令我惊讶的是:
SELECT * FROM cal_entry WHERE cal_entry.parent_id <> 'null'
它实际上显示的行中没有带有NULL
值的行(数据库中是真实的NULL
值,而不是内部带有'null'
的字符串)。
根据文档,我当然应该使用NOT NULL
。顺便说一下,它不能与= 'null'
一起使用,就像文档中正确说明的那样。
有人可以解释吗?
答案 0 :(得分:2)
您正在选择<> 'null'
为真的所有行。
比较(等于或不等于)null为null,因此,如果cal_entry.parent_id
为null的行,则条件将为false / null。
因此,您的查询将获取所有不为null或不包含字符串'null'的行。
(注意,您也可以写<>'something_else'
)
答案 1 :(得分:1)
此运算符给您的结果不等于。例如$ var!=空。 我们在mysql中写为<>。这是一种验证,该值应永远不等于null。
答案 2 :(得分:1)
假设parent_id
列中的int
,查询将返回所有非空,非零的行:
SELECT *
FROM (
SELECT NULL AS parent_id UNION ALL
SELECT 0 UNION ALL
SELECT 1 UNION ALL
SELECT 2
) AS cal_entry
WHERE cal_entry.parent_id <> 'null'
-- returns 1 and 2 but not 0!
在将数字与字符串进行比较时,MySQL会将字符串转换为数字。一些例子:
'null'
变为0 'asdf'
变为0 '1asdf'
成为123
'1'
变为1 您的查询的行为如下:
WHERE cal_entry.parent_id <> 0
答案 3 :(得分:0)
使用null时,应始终注意以下两个语句-
因此,在您的查询中,只要有比较null<>null
,它的第二条语句就会返回true。
此外,请始终考虑某些行可能包含null的可能性-
Select * from cal_entry where cal_entry.parent_id!=10
此查询将省略具有空条目的行。而是使用-
Select * from cal_entry where cal_entry.parent_id!=10 or cal_entry.parent_id is null