"! = или! =" выбирает все - PullRequest
       4

"! = или! =" выбирает все

0 голосов
/ 11 июля 2011

Допустим, у меня есть таблица со следующим содержимым: (только некоторые случайные значения)

year
2005
2009
2010
2912
2982
2947

Когда я запрашиваю:

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

Она выдаст все годы.Почему это так?

Ответы [ 4 ]

9 голосов
/ 11 июля 2011

Я думаю, что вы хотите

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

То, что вы хотите сказать, это то, что год не может быть 2005 или 2010 (! (Год == 2005 ИЛИ год == 2010)), что логическиэквивалентно (год! = 2005 И год! = 2010) (см. Закон де Моргана )

3 голосов
/ 11 июля 2011

Другие ответы подсказывают, что делать, но я бы хотел, чтобы вы сами сделали тест (забавно, я делаю это сейчас ...):

У вас есть

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 голосов
/ 11 июля 2011

Если 2005 год, то это не будет 2010 год, поэтому условие оценивается как истинное.Если 2010 год, то это не будет 2005 год, и то же самое произойдет.Если год не тот и другой, оба оценивают как истину.Вы, вероятно, хотите использовать и вместо или.

0 голосов
/ 11 июля 2011

год не может быть 2005 и 2010, поэтому возвращаемое условие or true всегда

Вам нужно использовать and

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

или использовать не в

SELECT userid FROM tbluser WHERE year not in (2005,2010)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...