SQL-соединение разных условий - PullRequest
0 голосов
/ 03 июля 2018

Я пишу большую хранимую процедуру, где мне нужно присоединиться к таблице, которая содержит соглашение. Однако, поскольку наша структурированная база данных была сделана более простым способом, я должен присоединиться к соглашению на различных условиях, чтобы получить правильную информацию по всем строкам. Поскольку не все соглашения существуют в rel и не все существуют в идентичности, не все строки объединяются.

Если я разделю утверждение ниже и присоединюсь к соглашению дважды, это сработает. однако тогда у меня есть два набора agr, что не является оптимальным. Представленное ниже утверждение кажется очень неэффективным. так как обычно весь код выполняется за 5 минут, но это никогда не будет сделано, не через 50 минут.

Так что есть лучший способ сделать это соединение, где я сначала присоединяюсь к agr1.agreement_id = rel.agreement_id, и если это возвращает null (нет соединения), тогда я использую agr1.bill_id = idt.identity для остальных.

  left JOIN agreement agr1
  on(agr1.agreement_id = rel.agreement_id)
  or(agr1.bill_id = idt.identity)

1 Ответ

0 голосов
/ 03 июля 2018

Вы можете использовать два left join s и coalesce() в select:

select . . .,
       coalesce(aa.col1, ab.col1) as col1, 
       . . .
from . . . left join
     agreement aa
     on aa.agreement_id = rel.agreement_id left join
     agreement ab
     on ab.bill_id = idt.identity and aa.agreement_id is null

Без условия or запрос должен быть намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...