假设我有一个包含以下内容的表:(只是一些随机值)
year
2005
2009
2010
2912
2982
2947
当我查询时:
SELECT userid FROM tbluser WHERE year!=2005 or year!=2010
它将输出所有年份。那是为什么?
答案 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)