Как объединить два запроса в один в Oracle SQL

У нас есть ошибка в производстве, к счастью, есть ручное решение для этого, однако я должен запускать ниже двух запросов каждое утро, чтобы исправить ошибку. Это так ручно, я хочу автоматизировать это и объединить два запроса в один. Однако у нас есть только эта ошибка в производстве, а не в DEV или QA, если я запутаюсь с объединенным запросом, который закончится хаосом, поэтому мне нужен ваш опыт.

1-й запрос содержит номера проектов

select id,  ugenProjectNumber
from unifier_uxpecai
where (pecaiChecklistNumber = 0 or pecaiChecklistNumber is null)
or (pecaiChecklistItemNumber = 0 or pecaiChecklistItemNumber is null)

2-й запрос исправляет неработающие ссылки между элементами действия и элементами списка, я вручную помещаю 1-й запрос в список уникальных номеров проектов во второй запрос и запускаю второй запрос на каждый уникальный номер проекта.

update unifier_uxpecai pai
set (pai.pecaiChecklistNumber, pai.pecaiChecklistItemNumber) =
(
   select pcl.id, pcli.id
   from unifier_uxpecl pcl
   inner join unifier_uxpecl_lineitem pcli on pcli.uuu_tab_id = 0 and 
   pcli.record_id = pcl.id
   where pcl.ugenProjectNumber = 'GL-16-161010-143502'
   and pcli.pecItemActionItemBPC = pai.id
)
where exists
(
   select pcli.pecItemActionItemBPC
   from unifier_uxpecl pcl
   inner join unifier_uxpecl_lineitem pcli on pcli.uuu_tab_id = 0 and 
   pcli.record_id = pcl.id
   where pcl.ugenProjectNumber = 'GL-16-161010-143502'
   and pcli.pecItemActionItemBPC = pai.id
)
and (pai.pecaiChecklistNumber = 0 or pai.pecaiChecklistItemNumber = 0)

Всего 1 ответ


Вы можете включить логику в запросы:

update unifier_uxpecai pai
set (pai.pecaiChecklistNumber, pai.pecaiChecklistItemNumber) =
(select pcl.id, pcli.id
 from unifier_uxpecl pcl join
      unifier_uxpecl_lineitem pcli
      on pcli.uuu_tab_id = 0 and pcli.record_id = pcl.id
 where pcl.ugenProjectNumber in (select ugenProjectNumber
                                 from unifier_uxpecai
                                 where (pecaiChecklistNumber = 0 or pecaiChecklistNumber is null) or
                                       (pecaiChecklistItemNumber = 0 or pecaiChecklistItemNumber is null
                                ) and
       pcli.pecItemActionItemBPC = pai.id
)
where exists
(
   select pcli.pecItemActionItemBPC
   from unifier_uxpecl pcl join
        unifier_uxpecl_lineitem pcli
        on pcli.uuu_tab_id = 0 and 
           pcli.record_id = pcl.id
   where pcl.ugenProjectNumber in (select ugenProjectNumber
                                   from unifier_uxpecai
                                   where (pecaiChecklistNumber = 0 or pecaiChecklistNumber is null) or
                                         (pecaiChecklistItemNumber = 0 or pecaiChecklistItemNumber is null
                                  ) and
        pcli.pecItemActionItemBPC = pai.id
) and
(pai.pecaiChecklistNumber = 0 or pai.pecaiChecklistItemNumber = 0)

Есть идеи?

10000