Страницы

Поиск по вопросам

воскресенье, 15 марта 2020 г.

Возврат множества из условия (аналог CASE)

#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

Комментариев нет:

Отправить комментарий