#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 минут. спасибо за объяснение 🙂