Почему добавление 2-го варианта в «НРАВИТСЯ», похоже, отменяет мою функцию » дата=»?

#sql #sql-like #presto

Вопрос:

Я пытаюсь получить результаты, которые позволят мне использовать 2 варианта для предложения LIKE, но также указать конкретную дату. Этот запрос выдает мне только строки с dt 2021-06-04

 SELECT * FROM table.name
where
dt = date '2021-06-04'
 

Тем не менее, этот запрос удовлетворяет 2 вариантам LIKE, но, похоже, полностью игнорирует мои критерии dt=. Это дает мне результаты за все время, а не только за 2021-06-04

 SELECT * FROM table.name
where
dt = date '2021-06-04'
and
item_code like 'RNW%'
OR
item_code like 'XX%'
 

Ответ №1:

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

 SELECT * FROM table.name
where
(dt = date '2021-06-04' and item_code like 'RNW%')
OR
item_code like 'XX%'
 

Чтобы исправить это, добавьте круглые скобки, чтобы сгруппировать условия так, как вы хотите:

 SELECT * FROM table.name
where 
dt = date '2021-06-04'
and
( item_code like 'RNW%' OR item_code like 'XX%' )
 

Ответ №2:

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

 SELECT * FROM table.name
where
dt = date '2021-06-04'
and (item_code like 'RNW%' OR item_code like 'XX%')