sql SELECT返回值匹配NULL或另一个值

时间:2012-03-15 03:26:56

标签: mysql sql

这个问题看起来非常基本,但我无法通过谷歌找到答案,而且我花了最后一小时测试没有运气。我在尝试返回一组行时遇到困难。我想要等于11,1或Null的行。我认为这是搞砸我的Null。以下只是我跑过的众多测试之一......我知道它不起作用。任何帮助真的很感激。提前致谢

SELECT * FROM have
    WHERE have.flag = 11 || 1 || NULL;

4 个答案:

答案 0 :(得分:4)

您需要将NULL111分开处理,然后将这些值放入您的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的回答是正确的。