Можно ли сделать то же самое с одним утверждением? - PullRequest
0 голосов
/ 22 апреля 2020

В триггере у меня есть эта логика c

 SELECT IS_DELETE, IS_EDITABLE  INTO is_delete_old, is_delete_old
    FROM MAP_CALCULATION MC 
    INNER JOIN map_calculation_group MG ON MC.ID_CALC = MG.ID_CALC 
    WHERE MG.ID_CALC = MC.ID_CALC 
    AND :old.id_group = mg.id_group;

 SELECT IS_DELETE, IS_EDITABLE  INTO is_delete_new, iis_editable_new
    FROM MAP_CALCULATION MC 
    INNER JOIN map_calculation_group MG ON MC.ID_CALC = MG.ID_CALC 
    WHERE MG.ID_CALC = MC.ID_CALC 
    AND mg.id_group = :new.id_group;

Можно ли сделать то же самое с одним запросом? Тем не менее, это может быть

1 Ответ

0 голосов
/ 22 апреля 2020

Рассмотрим условное агрегирование:

select 
    max(case when  mg.id_group = :new.id_group then is_delete end),
    max(case when  mg.id_group = :new.id_group then is_editable end),
    max(case when  mg.id_group = :old.id_group then is_delete end),
    max(case when  mg.id_group = :old.id_group then is_editable end)  
into 
    is_delete_new, 
    is_editable_new, 
    is_delete_old, 
    is_editable_old
from map_calculation mc 
inner join map_calculation_group mg on mc.id_calc = mg.id_calc 
where 
    mg.id_calc = mc.id_calc 
    and mg.id_group in (:new.id_group, :old.id_group);
...