where子句中的NULL值

cas*_*rmc 11 mysql sql null

我有一张像这样的桌子"bla":

[id]    [name]    [fk]
1       test      4
2       foo       5
3       bar       NULL
Run Code Online (Sandbox Code Playgroud)

如果我做的SQL查询

SELECT * FROM bla WHERE fk <> 4
Run Code Online (Sandbox Code Playgroud)

我只得到id为2的记录.我没有得到id为3的记录,其中fk为null.我以为是NULL!= 4.似乎这是错误的.

为什么会这样?

Mat*_*Mat 30

NULL没有比较等于任何东西.您需要显式接受空值:

where fk <> 4 or fk is null;
Run Code Online (Sandbox Code Playgroud)

有关处理的更多信息,请参见使用NULLNULL.