Вопрос по mysql, database, select – Как использовать один или несколько OR и AND в запросе mysql [duplicate]

1

Possible Duplicate:
MYSQL AND OR On Many To Many Table

Я хочу сделать запрос MySQL, где данные извлекаются из базы данных с некоторыми правилами.

Я хочу проверить, какие записи похожи на var1 или var2 или var3 и т. Д. И меньше, чем заданный идентификатор.

подобно

SELECT * 
FROM database 
WHERE name = var1 
    OR name = var2 
    OR name = var3 
    AND id < 200

Но вышеприведенная строка действительно не работает. Также, когда больше нет записей (с идентификатором меньше 200), он показывает мне некоторые записи.

Ты знаешь, что я имею в виду? Запрос должен выбрать данные, которые содержат одно из моих разыскиваемых имен И которые меньше, чем идентификатор ...

У меня там проблемы логического мышления ...

Ваш Ответ

3   ответа
0

Есть ли разница между этими двумя запросами?

Вы поймете, что этоimportance скобок в OR и AND.

и последнее, но не менее важное, спасибо вам за подсказку и ссылку! John Brunner
13

старшинство с логическими операторами. В случае сомнений используйте скобки.

В твоем случае:

SELECT * FROM database WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200

Ваш оригинальный запрос был интерпретирован следующим образом, потому чтоAND имеет более высокий приоритет

SELECT * FROM database WHERE name = var1 OR name = var2 OR (name = var3 AND id < 200)
Update

Как прокомментировалRocketВы могли бы сжать свойOR заявления кIN так как они работают на одном поле. Это устранит необходимость в скобках.

SELECT * FROM database WHERE name IN (var1,var2,var3) AND id < 200

Тем не менее, важно понимать разницу между двумя исходными запросами, поскольку вы неизбежно будете писать запросы с несколькими условиями.

@Rocket, Согласен. Я видел то же самое. Но хотел сосредоточиться на конкретном вопросе :)
Вы также можете сделатьWHERE name IN (var1,var2,var3) AND id < 200
Я подумал, что упомяну это, так как это будет работать для этого конкретного сценария.
Благодарю. Кажется, что это работает сейчас. вау, только скобка отсутствовала ... но большое спасибо за подсказку (также @Rocket)! John Brunner
+1, скобки ваши друзья.
1

SELECT * FROM database_table WHERE (name = var1 OR name = var2 OR name = var3) AND id < 200
Также вам большое спасибо! John Brunner

Похожие вопросы