Группировка операторов И и ИЛИ в PostgreSQL

Я всегда использую скобки в запросах sql. Но у меня есть пример:

DELETE FROM prog 
WHERE prog_start >= $1 AND prog_start < $2
   OR prog_end > $1 AND prog_end <= $2

Равно ли:

DELETE FROM prog
WHERE ( prog_start >= $1 AND prog_start < $2 )
   OR ( prog_end > $1 AND prog_end <= $2 ) 

или не ?


person Bdfy    schedule 26.04.2012    source источник


Ответы (2)


В SQL оператор AND имеет приоритет над оператором OR. PostgreSQL придерживается спецификации здесь. Вы можете узнать точный приоритет в PostgreSQL в документах Lexical Структура: Приоритет оператора.

Так что в вашем случае результат будет тот же. Однако гораздо проще и чище просто использовать круглые скобки.

person Raphaël Althaus    schedule 26.04.2012

Это соответствует приоритету оператора http://www.postgresql.org/docs/6.5/static/operators.htm#AEN1615.

Чтобы сформировать сложное условие, всегда лучше заключать ваши условия в скобки.

person Rahul    schedule 26.04.2012
comment
хороший анализ, но... неверный вывод по этому конкретному случаю, не так ли? - person Raphaël Althaus; 26.04.2012
comment
Версия 6.5 немного устарела для справки. - person vyegorov; 26.04.2012
comment
postgresql.org/docs/9.0/ static/ (кстати, изменения приоритета операторов или /and, вероятно, не самые обычные изменения...) - person Raphaël Althaus; 26.04.2012
comment
Что касается ссылки на руководство по PostgreSQL, рассмотрите meta.stackexchange.com/questions/108714/ - person Erwin Brandstetter; 26.04.2012
comment
Правильная ссылка на текущее руководство: postgresql. org/docs/current/interactive/ - person Erwin Brandstetter; 05.11.2012