Oracle присоединиться к одной таблице или другой - PullRequest
0 голосов
/ 17 мая 2018

Есть ли способ выполнить следующее:

Table: PERSON
OID|NAME
--------
1  |John
2  |Mary

Table: COOL_PERSON
OID|PERSON_OID|...Other columns
--------------------------
5  |1         |...

Table: SMART_PERSON
OID|PERSON_OID|...Other columns
--------------------------
5  |1         |...

Итак, я знаю, что и SMART_PERSON, и COOL_PERSON имеют PERSON_OID и несколько других столбцов, которые совместно используются двумя таблицами.На данный момент у меня есть очень большой запрос, который объединяет результаты между этими двумя таблицами, но что меня интересует, есть ли способ сказать «присоединиться к какой-либо таблице, в которой существует PERSON_OID»?Таким образом, мне не нужно было бы UNION точно такой же запрос, где единственное отличие состоит в том, что в одном я присоединяюсь к COOL_PERSON, а в другом я присоединяюсь к SMART_PERSON.Надеюсь, что это имеет смысл.

1 Ответ

0 голосов
/ 17 мая 2018

Решение состоит из двух left join с:

select p.*, coalesce(cp.col1, sp.col1) as col1,
       coalesce(cp.col2, sp.col2) as col2,
       . . .
from person p left join
     cool_person cp
     on p.oid = cp.person_oid left join
     smart_person sp
     on p.oid = sp.person_oid and cp.person_oid is null;

Это должно иметь лучшую производительность, чем подход union.Тем не менее, вы должны рассмотреть возможность исправления вашей модели данных.Общие столбцы, вероятно, должны быть в person.

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