CASE
возможно. Но короче, чтобы написать было бы IF()
(по крайней мере с MySQL):
SELECT *, IF(COND2, 1, 0) AS cond2, IF(COND3, 1, 0) as cond3 ...
и каждый cond*
соответствует, если его значение равно 1
.
Конечно, нет смысла проверять, совпадает ли COND1
или нет. Для всех результатов, которые вы получите, COND1
было правдой. Так что IF(COND1, 1, 0)
всегда будет возвращать 1
(в вашем примере).
Обновление
Опять же, по крайней мере для MySQL, я обнаружил, что следующего достаточно для того, чтобы получить в качестве результата 1
или 0
:
SELECT *, COND2 AS cond2, COND3 as cond3 ...
и в отношении ответа Марка вы можете избежать написания условий дважды, если вы используете HAVING
вместо WHERE
(HAVING
в качестве доступа к псевдонимам):
SELECT *, COND2 AS cond2, COND3 as cond3
FROM table
HAVING COND1 AND (cond2 OR cond3)
(примечание: верхний регистр означает фактическое выражение условия, а нижний регистр - псевдоним)
Обновление 2:
Ну, это не так сильно меняется: вам нужно только проверить условия, которые подключены через OR
в вашей обновленной версии, достаточно проверить, является ли COND2
истинным или нет. Если это так, то COND3
также верно и наоборот.
SELECT *, COND1 AS cond1, COND2 as cond2, COND4 as cond4
FROM table
HAVING cond1 OR (cond2 AND COND3) OR cond4
Я думаю, суть ясна.