Установка своего порядка выполнения sql запроса

Рейтинг: 0Ответов: 1Опубликовано: 09.08.2023

Всем привет возможно ли как-то установить свой порядок выполнения sql запроса. У меня есть огромный select, выложу его небольшую часть

select max(p.fullname) fullname,     
                  from (select c1.*,
                               row_number() over(partition by c1.id_r order by rownum) n,
                               row_number() over(partition by c1.srv_code, c1.srv, c1.od_exec_id order by rownum) ns
                          from ( select r.id id_r
                                  from n_req_heads    h,
                                       n_requests     r,
                                       n_requests_out ro,
                                 where h.id = r.req_head_id
                                   and r.id = ro.request_id(+)
                                   and ro.deposit_id = d.id(+)
                                   and d.registry_id = mr.id(+)
                                 order by med_chrt,
                                          med_chrt_id,
                                          lpad(srv_code, 15, '0'),
                                          srv,
                                          od_exec_id,
                                          seq,
                                          id_r,
                                          name,
                                          name_out) c1
                         where 1 = 1 
                        ) c2,
                       s_str_orgs p,
                       t_fios f,
                       a.od_drugs od
                 where c2.n = 1
                   and c2.s_str_org_s_str_org_id = p.s_str_org_id
                   and c2.t_person_id = f.t_person_id
                   and f.status = 0
                   and od.od_order_id = c2.orders_id
                   and od.status = 0
                   and  exists (select 1
                          from n_medic_reg_pharm mrp
                         where mrp.n_medic_reg_id = c2.code_out
                           and mrp.rls_ph_id in
                               (select rc.id
                                  from rls_clspharmagroup rc 
                                 where rc.id = '245'))
                 group by c2.t_med_chart_id,
                          c2.code,
                          initcap(f.family || ' ' || f.name || ' ' ||
                                  f.patronimic), 
                          c2.s_str_org_s_str_org_id,
                          c2.p_name
                

Девелопер сначала выполняет where по подзапросу c2 из-за этого у меня не корректно отрабатывает условие

c2.n = 1

Можно ли как-то сделать так, чтобы сначала выполнялся селект с2, а потом уже по нему производились все манипуляции

Ответы

▲ -1

Я бы начал с отладки подзапросов, а потом бы их соединял.