#sql #oracle
Пытаюсь написать запрос в Oracle, который использует разные множества для IN() в
условии. Общий вид запроса примерно такой:
-- что-то забирает
WHERE id IN
(CASE
WHEN name LIKE '%max%'
THEN (1, 2, 5)
ELSE (SELECT id FROM anotherTable)
END);
Понятно, что такой вариант не работает и выдаёт ошибку ora-01427. Судя по тому, что
я прочитал в сети, CASE не может вернуть множество.
Что можно использовать, чтобы вернуть именно множество?
Ответы
Ответ 1
Попробуй это where ( NAME like '%max%' and ID in (1, 2, 5) ) or ( NAME not like '%max%' and ID in (select ID from anotherTable) )Ответ 2
Можно сделать еще так: where 1 = case when name like '%max%' and id in (1,2,5) then 1 when name like '%min%' and id in (select id from anotherTable) then 1 end
Комментариев нет:
Отправить комментарий