我知道在SQL语句的WHERE子句中使用column = NULL
会导致空的结果集。
由于这在编程环境中效率很低,我正在寻找一种方法,让MySQL像column IS NULL
一样解释column = NULL
,也许可以通过设置SQL模式?
您可以改用
<=>
。不过我不会。这是不可移植的。
(感谢Martin Smith向我指出这是我问题的解决方案)
您可以在WHERE子句中使用case语句来使用正确的语法:
http://www.postgresql.org/docs/9.4/static/functions-conditional.html
SELECT * FROM my_items WHERE
CASE WHEN 1=1 THEN mac = '08:00:2b:01:02:03'
WHEN 1=2 THEN mac IS NULL
END;
显然,在本例中,将始终调用第一种情况(WHEN 1=1)。你可以把你自己的逻辑放在满足你的条件。
至少PostgreSQL有一个的参数
transform_null_equals = true
当设置为true时,查询解析器将转换
field = NULL
至
field is NULL
事先。有一件事告诉我,在MySQL中隐藏了一个等价的参数,没有文档。
从2020-07-15开始编辑
我的"不是真正的解决方案";这可能是我在SO的第一个答案。我有点惭愧,因为我回答了关于另一个DBRMS引擎的问题,而不是OP问我的问题。
无论如何,正确的答案应该是使用<=>
运算符,正如其他人在他们的答案中所说的那样。您将=
替换为它,它将表现为其他比较:
A = B // zero if different, one if equals, this is treated as a boolean result
A != NULL // always null, therefore not false nor true.
A <=> B // zero if different, one if equals, zero is one of the variables are null, 1 if both are.
这不是一个设置,因此它的行为永远不会是会话或DDBB。