Можно ли объединить два оператора выбора, когда составные первичные ключи не включены в оба оператора - PullRequest
0 голосов
/ 08 февраля 2020

Мне нужен совет.

У меня проблема с соединением двух таблиц.

Пример: владелец имеет составной ключ из пяти частей
Позиция имеет составной ключ из шести частей

Таблица владельца имеет
As_Of_Date (ключ), PORT_CD (ключ), Deal_Or_Schedule ( Key), Deal_Sched_No (Key), owner_port_cd (Key), Percent

Таблица позиций имеет As_Of_Date (Key), PORT_CD (Key), Deal_Or_Schedule (Key), Deal_Sched_No (Key), Book_CD_Nme (Key), Positn_ Ключ)

Как видно из 4 совпадений условий в Owner, чтобы присоединиться к таблице 2, но Onwer_port_cd не может быть присоединен, поскольку он не находится в позиции.

Мне нужно получить одну таблицу из двух таблиц, чтобы я мог сопоставить доход с ее владельцем.

В настоящее время мое объединение приводит к декартовому продукту, поскольку он не учитывает все квалификаторы.

1 Ответ

0 голосов
/ 09 февраля 2020

Попробуйте это:

SELECT *
FROM JUNE_INCOME JI
JOIN CHART_OF_ACCOUNTS CA
ON JUNE_INCOME.GL_ACCT_NO = CHART_OF_ACCOUNTS.GL_ACCT_NO
JOIN SECURITY_MASTER SM
ON JUNE_INCOME.INS_NO = SECURITY_MASTER.INS_NO
JOIN POSITION_ALLOCATION PA
ON JUNE_INCOME.TRADE_DT = POSITION_ALLOCATION.AS_OF_DATE
AND JUNE_INCOME.PORT_CD = POSITION_ALLOCATION.PORT_CD
AND JUNE_INCOME.BOOK_CD_NME = POSITION_ALLOCATION.BOOK_CD_NME
AND JUNE_INCOME.POSITN_NUM = POSITION_ALLOCATION.POSITN_NUM
JOIN POSITIONS PO
ON JUNE_INCOME.PORT_CD = POSITIONS.PORT_CD
AND JUNE_INCOME.BOOK_CD_NME = POSITIONS.BOOK_CD_NME
AND JUNE_INCOME.POSITN_NUM = POSITIONS.POSITN_NUM
JOIN OWNERSHIP OW
ON PA.AS_OF_DATE=OW.AS_OF_DATE
AND PA.PORT_CD=OW.PORT_CD
AND PA.DEAL_OR_SCHEDULE=OW.DEAL_OR_SCHEDULE
AND PA.DEAL_SCHED_NO=OW.DEAL_SCHED_NO
JOIN OWNERS 
ON OWNERSHIP.OWNER_PORT_CD = OWNERS.OWNER_PORT_CD

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

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