LINUX.ORG.RU

sql запрос и скобочки

 


0

1

Всегда ставил скобочки в сложных запросах, так что след запрос поставил меня в тупик:

'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' )

?

★★☆☆

Посмотри в документации к СУБД, в SQL Server, например, будет работать именно так, AND имеет больший приоритет по сравнению с OR.

encyrtid ★★★★★
()
Ответ на: комментарий от roy

Ссылку посмотрю попозже (сейчас нет времени), но своей практикой (Oracle 9i) могу заверить, что OR отработает как и положено - включит оба условия в отбор. Могу ошибаться в том случае, если имеет значение очередность чередования операторов, но я с таким еще не сталкивался и что-то даже не слышал о таком.

winlook38 ★★
()
Ответ на: комментарий от winlook38

Ого, провереил на примере - действительно, отрабатывает как у ТС. Извиняюсь за дезинформацию, забираю свои слова назад и берусь за учебники.

winlook38 ★★
()

SQL> select * from (select 0 a, 0 b from dual union select 0, 1 from dual union select 1, 0 from dual union select 1, 1 from dual) where a = 0 and b = 0 or a = 1 and b = 1
2 /

A B
---------- ----------
0 0
1 1

SQL>

Наверное стоило бы удалить позорный дезинформирующий коммент, но пусть останется.

winlook38 ★★
()

Легко понять, если вспомнить, что AND называют логическим умножением, а OR - сложением. Итого код разобрать не сложнее, чем 2 * 3 + 7 * 8

unC0Rr ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.