вопрос синтаксиса postgres для OR? - PullRequest
0 голосов
/ 30 мая 2010

Первый из приведенных ниже работает, но просто хотел посмотреть, есть ли лучший способ ...

Если я пытаюсь найти все записи, которые начинаются с 'C', либо с флагом 2, либо со статусом 9, нужно ли мне дважды вводить критерии 'C'?

т.е.

"SELECT * FROM mytable WHERE name like 'C%' AND flag = 2 OR name like 'C%' AND status = 9"

Или, есть ли способ написать это так, чтобы мне нужно было установить 'C%' только один раз?

Ответы [ 2 ]

1 голос
/ 30 мая 2010

ИЛИ имеет более низкий приоритет, чем AND, поэтому вам нужны скобки.

ГДЕ ИМЯ НРАВИТСЯ "C%" И (flag = 2 ИЛИ flag = 9)

Вы также можете проверить членство в наборе значений

... И флаг IN (1, 9)

1 голос
/ 30 мая 2010

Логически AND и OR являются дистрибутивными по отношению друг к другу, т.е.

a & (b | c) = (a & b) | (a & c)

это означает, что ваше состояние может быть переписано как

name LIKE 'C%' AND (flag = 2 OR status = 9)
...