Простая помощь SQL вопрос - PullRequest
       4

Простая помощь SQL вопрос

2 голосов
/ 08 февраля 2011

У меня есть таблица с именами пользователей и категориями, и у меня есть запрос:

select * from articles where username='333' or username='222' and category='movies'

Я хочу, чтобы это возвращало только записи от пользователей «333» и «222», которые относятся к категории «фильмы», но это возвращает все статьи этих пользователей из всех категорий.

Что я делаю не так?

Ответы [ 6 ]

3 голосов
/ 08 февраля 2011

Может помочь использование ключевого слова IN вместо AND / OR.

select *
from articles
where username in ('333','222') and category='movies'

IN позволяет указать список значений.

Кроме того, если вы хотите MIX И / ИЛИ, убедитесь, что вы заключили их в скобки.Если вы не заключите их в скобки, приоритет в большинстве основных СУБД будет равен И перед ИЛИ (заключен в скобки вокруг ANDS).

select *
from articles
where (username = '333' or username = '222') and category='movies'

Как вы можете видеть здесь (Приоритет оператора (TSQL 2005) , AND входит под номером 7, тогда как OR входит под номером 8.

3 голосов
/ 08 февраля 2011
select * from articles where (username='333' or username='222') and category='movies'
3 голосов
/ 08 февраля 2011
SELECT * 
    FROM articles
    WHERE (username='333' OR username='222')
        AND category='movies'
2 голосов
/ 08 февраля 2011

Операторская процедура.Возможно, вы захотите прочитать руководство.AND связывает более жестко (имеет более высокий приоритет, чем) 'OR', следовательно, ваш запрос анализируется как

select *
from articles
where username = '333' or ( username = '222' and category = 'movies' )

Вам необходимо использовать скобки, чтобы явно указать порядок операций, который вы хотите:

select *
from foo
where ( user = 'a' or user  = 'b' )
  and category = 'c'

альтернативно, используйте in:

select *
from foo
where user in ('a','b')
  and category = 'c'
2 голосов
/ 08 февраля 2011

Вероятно, у вас нет скобок. Если вы более точны, что-то вроде:

select * from articles where (username='333' or username='222') and category='movies'

тогда ты должен быть в порядке.

Также есть ключевое слово IN, поэтому вы можете сделать:

select * from articles where username in ('333', '222') and category='movies'
0 голосов
/ 08 февраля 2011

Вы ожидаете, что он будет проанализирован:

select * from articles where (username='333' or username='222') and category='movies'

Но вместо этого он анализируется:

select * from articles where username='333' or (username='222' and category='movies')

Поставьте скобки, и все будет правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...