Преобразовать неявное соединение в явное - PullRequest
1 голос
/ 25 марта 2019

У меня есть запрос ниже, который, по-видимому, неявно объединяет 3 таблицы одновременно, я пытаюсь переписать это, чтобы использовать явные объединения, но я не могу обойти это, кажется, что столбец соединения для одно соединение зависит от соединения, которое еще не было завершено.

Это сценарий, который может вместить только неявное соединение?

У меня проблема с этим миром:

AND((t.object_type = 'SOME_VALUE' and i.pro_prod_id=400 and i.gbcert_id || '-Packing' = ta.gbcert_id)
OR (t.object_type in ('V1','V2','V3') and i.gbcert_unique_id = ta.gbcert_id)) 

Вы видите, что мы решаем, к какому столбцу присоединиться, исходя из того, t.object_type = 'SOME_VALUE' или t.object_type in ('V1','V2','V3')

Но у меня пока не будет этого значения, потому что пока нет соединения, это похоже на яйцо до проблемы с курицей для меня ..

Это более полная версия запроса:

FROM TRANSACTION t, USG_Award ta,
inbox i,
stores s,
clients cl,
client_types ct
WHERE ct.client_type = cl.client_type
AND ct.usg_aggregation_client IS NULL
AND i.orig_store_code = s.sto_store_code
AND i.orig_store_code   = cl.store_code
and ((t.object_type = 'SOME_VALUE' and i.pro_prod_id=400 and i.gbcert_id || '-Pack' = ta.gbcert_id)
OR (t.object_type in ('V1','V1','V1') and i.gbcert_unique_id = ta.gbcert_id))
AND ta.fk_usg_tx = t.pk_usg_tx

Этот запрос работает в его текущей форме, это устаревший код, который я не писал. Код был продезинфицирован.

1 Ответ

2 голосов
/ 25 марта 2019

Вы можете переместить такие условия в предложение ON:

FROM TRANSACTION t JOIN
     USG_Award ta
     ON ta.fk_usg_tx = t.pk_usg_tx JOIN
     inbox i 
     ON ((t.object_type = 'SOME_VALUE' and i.pro_prod_id = 400 and i.gbcert_id || '-Pack' = ta.gbcert_id) OR
         (t.object_type in ('V1', 'V1', 'V1') and i.gbcert_unique_id = ta.gbcert_id)
        )JOIN
     stores s
     ON i.orig_store_code = s.sto_store_code JOIN
     clients cl 
     ON i.orig_store_code = cl.store_codeJOIN
     client_types ct
     ON ct.client_type = cl.client_type
WHERE ct.usg_aggregation_client IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...