Silbermann
Дата: 21.02.2007 07:52:26
Привет. Есть view, мне нужно, в зависимости от параметров (например параметров какого-то пакета, которые задаются перед вызовом этой view), сформировать раздел where этой view. Потыкался с CASE-ом - ничего не вышло, там довольно-таки громоздские части изменяются в зависимости от этих параметров. Подскажите как быть ? Спасибо
Silbermann
Дата: 21.02.2007 09:56:36
Спасибо за ссылку. Только с помощью параметров походу мне не удастся сделать, то, что я хочу. Т.е., например, есть несколько вариантов WHERE блока, где меняются не только параметры. Вот скажем, как разрулить следующую ситуацию ?
Вариант 1:
WHERE
(t1.field1='value'
or t2.field1 like '%value1%'
or t2.field1 like '%value2%'
)
Вариант 2:
WHERE
(t.field='value'
and t2.field1 not like '%value1%'
and t2.field1 not like '%value2%'
)
Т.е. в одном случае используется OR, а вдругом AND.
Silbermann
Дата: 21.02.2007 10:10:35
Если не трудно, можете расписать эту строку приминительно для конкретного примера ?
Например, для
WHERE t1.field = 'val' AND t1.field = 'val2'
и
WHERE t1.field = 'val' OR t1.field = 'val2'
Спасибо.
ModelR
Дата: 21.02.2007 13:00:30
А простая логика не помогает (X, P, Q - логические выражения):
IF X THEN P ELSE Q == X AND P OR (NOT X) AND Q
where
Вариант=1 and
(t1.field1='value'
or t2.field1 like '%value1%'
or t2.field1 like '%value2%'
)
or
Вариант=2 and
(t.field='value'
and t2.field1 not like '%value1%'
and t2.field1 not like '%value2%'
)
Амаразм
Дата: 01.03.2007 16:50:44
Мне кажется лучше выбрать с OR, и сверху ограничивать уже необходимый набор по полю type_
SELECT t1.*, t2.*,
CASE WHEN t2.field1 LIKE '%value1%' AND t2.field1 LIKE '%value1%' AND t2.field1 LIKE '%value2%' THEN 1 ELSE 2 END type_
FROM ...
WHERE
(t1.field1='value'
OR t2.field1 like '%value1%'
OR t2.field1 like '%value2%'
)