PEIYANGXINQU Ответов: 1

Как оптимизировать код для oralcle case when condition?


Мой sql имеет два поля результата в соответствии с одним и тем же условием,теперь я должен написать его два раза,интересно, компилятор базы данных уже оптимизировал код автоматически или я должен изменить другой способ оптимизации sql?
select id,parent_id as p_Id,name,
(case when exists(select * from t_group t2 where t1.id=t2.parent_id) 
then 2 else 1 end) type,
(case when exists(select * from t_group t2 where t1.id=t2.parent_id) 
then 'true' else 'false' end) as is_Parent
from t_group t1

Я пытался изменить его, но потерпел неудачу.
select id,parent_id as p_Id,name,
(case when exists(select * from t_group t2 where t1.id=t2.parent_id) 
then 2 else 1 end) type,
(case when type==1 
then 'true' else 'false' end) as is_Parent
from t_group t1 


Что я уже пробовал:

Я пытался изменить его, но потерпел неудачу.
выберите id, parent_id как p_Id, имя,
(случай, когда существует(выберите * от t_group Т2 где Т1.ИД=Т2.ид_родительского_объекта)
тогда 2 иначе 1 конец) тип,
(случай, когда Тип==1
тогда 'true' else 'false' end) as is_Parent
из t_group Т1

PIEBALDconsult

Я избегаю подзапросов, когда это возможно - исторически они работали очень плохо (хотя я ожидаю, что за последние двадцать лет ситуация улучшилась). В наши дни я предпочитаю общие табличные выражения и соединения.

1 Ответов

Рейтинг:
1

Maciej Los

Вы должны самостоятельно присоединиться к таблице с иерархическими данными!!! Видеть: Иерархические Запросы[^]


Дополнительные сведения о соединениях см. В разделе: см.: Визуальное представление SQL-соединений[^]