Как отобразить запрос на основе условия в SQL?

#sql #where-clause

#sql #предложение where

Вопрос:

Я знаю, что это просто, но я все еще удивляюсь, почему я не получаю желаемый результат:

 SELECT 
    name, amount, status
FROM 
    asdfg
WHERE 
    status = '1' 
    AND Type = 'P' 
    AND id = 'O10' OR id = 'OM1' OR id = 'OM6'
  

но я получил такой результат, который неверен. Как мне убедиться, что только результат с status = 1 может отображаться нет 0 ?

 name  | amount | status
------ -------- -------
 lili |   35   |  0
 opi  |   47   |  0 
 moss |   14   |  0
  

Ответ №1:

Это проблема логического приоритета. AND имеет приоритет над OR , поэтому вам нужно заключить OR условие в круглые скобки:

 WHERE status = '1' 
  AND Type = 'P' 
  AND (id = 'O10' OR id = 'OM1' OR id = 'OM6')
  

А еще лучше, используйте IN :

 WHERE status = '1' 
  AND Type = 'P' 
  AND id IN ('O10', 'OM1', 'OM6')
  

Комментарии:

1. @willu: потому что это логически эквивалентно OR в этом контексте, и все же проще писать и следовать — и вам больше не нужно беспокоиться о приоритете операторов.

2. я вижу! теперь полностью понял, спасибо. примет ваш ответ через 7 минут. спасибо за объяснение 🙂