这个问题看起来非常基本,但我无法通过谷歌找到答案,而且我花了最后一小时测试没有运气。我在尝试返回一组行时遇到困难。我想要等于11,1或Null的行。我认为这是搞砸我的Null。以下只是我跑过的众多测试之一......我知道它不起作用。任何帮助真的很感激。提前致谢
SELECT * FROM have
WHERE have.flag = 11 || 1 || NULL;
答案 0 :(得分:4)
您需要将NULL
与1
和11
分开处理,然后将这些值放入您的where子句中。
SELECT *
FROM have AS h
WHERE h.flag IS NULL
OR h.flag IN (1, 11);
答案 1 :(得分:1)
作为替代方案:
SELECT *
FROM have
WHERE nullif(nullif(flag,1),11) IS NULL
答案 2 :(得分:1)
或者,您可以选择
select * from have as h where
IFNULL(h.flag,1) in (1,11)
答案 3 :(得分:1)
这是解释:
SELECT * FROM have
WHERE have.flag = 11 || 1 || NULL;
你所说的实际上是:
(have.flag = 11) || 1 || NULL
true || 1 || NULL
1 || NULL
1
(have.flag = 11) || 1 || NULL
false || 1 || NULL
1 || NULL
1
始终评估为1.
=
的优先级高于||
@Adam Wenger的回答是正确的。