table 'materials'
id sku content
10 IT2 Iron
11 IT3 Steel
12 IT4 Steel
13 IT5 NULL
14 IT6 Iron
15 IT7 Glass
select id, sku, content from materials where content !='Iron';
Run Code Online (Sandbox Code Playgroud)
返回结果:
id sku content
11 IT3 Steel
12 IT4 Steel
15 IT7 Glass
Run Code Online (Sandbox Code Playgroud)
为什么在结果集中没有返回NULL值的id#13?使用MYSQL.
Vam*_*ala 17
根据你的where子句进行比较null != 'Iron',它根据SQL的3路逻辑评估为UNKNOWN,既不是真的也不是假的.因此查询不会返回它.
如果您需要生成null行,则应使用
where content !='Iron' or content is null
Run Code Online (Sandbox Code Playgroud)
编辑:另一个选项是使用<=>带有否定的关系null安全相等运算符.
not content <=> 'Iron'
Run Code Online (Sandbox Code Playgroud)
从文档中,
NULL安全相等.此运算符执行与=运算符类似的相等比较,但如果两个操作数均为NULL,则返回1而不是NULL;如果一个操作数为NULL,则返回0而不是NULL.
<=>运算符等同于标准SQL IS NOT DISTINCT FROM运算符.
mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0
mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
Run Code Online (Sandbox Code Playgroud)