“!=或!=”选择一切

时间:2011-07-11 13:13:31

标签: mysql sql

假设我有一个包含以下内容的表:(只是一些随机值)

year
2005
2009
2010
2912
2982
2947

当我查询时:

SELECT userid FROM tbluser WHERE year!=2005 or year!=2010

它将输出所有年份。那是为什么?

4 个答案:

答案 0 :(得分:9)

我认为你想要的是

SELECT userid FROM tbluser WHERE year!=2005 AND year!=2010

你想说的是,这一年不能是2005年或2010年(!(年= = 2005年或= 2010年))这在逻辑上等同于(年!= 2005年和年!= 2010年)(见De Morgan's Law

答案 1 :(得分:3)

如果年份是2005年那么它将不会是2010年,因此条件将评估为真。如果这一年是2010年那么它将不会是2005年,因此也会发生同样的情况。如果这两年都不会评估为真。你可能意味着使用而不是或。

答案 2 :(得分:3)

其他答案表明该做什么,但我希望你自己做一些测试(有趣的是,我现在正在做...):

你有

WHERE year!=2005 or year!=2010

现在,根据该条件检查一些号码列表。例如,使用2011:

WHERE 2011!=2005    <-- indeed 2011 is not equal to 2005, so this is TRUE
   or 2011!=2010    <-- indeed 2011 is not equal to 2010, so this is TRUE

将初步结果插入您的条件:

WHERE TRUE
   or TRUE          <-- if something is TRUE or TRUE, then surely the result
                        is TRUE as well

如果你进一步思考,那么世界上每个值的条件都是正确的,因为单个值不能等于多个不同的值。

,例如,使用2005:

WHERE 2005!=2005    <-- 2005 _is_ equal to 2005, so this is FALSE
   or 2005!=2010    <-- 2005 is not equal to 2010, so this is TRUE

然后

WHERE FALSE
   or TRUE          <-- Read: Where FALSE is true or TRUE is true, summa TRUE.

答案 3 :(得分:0)

年份不能是2005年和2010年,因此or条件总是返回true

您需要的是使用and

SELECT userid FROM tbluser WHERE year!=2005 and year!=2010

或使用not in

SELECT userid FROM tbluser WHERE year not in (2005,2010)