SQL - объединение 3 таблиц - PullRequest
       2

SQL - объединение 3 таблиц

0 голосов
/ 08 января 2019

У меня есть 3 упрощенные таблицы:

  1. Балансы: PartyID, PartyName, SecurityName, BalanceEUR

  2. Стороны: PartyID, PartyName, PartyGeneralID, PartyAddress

  3. Ценные бумаги: SecurityID, SecurityName, IssuerID, MaturityDate

Select
  Balances.PartyName,
  Balances.SecurityName,
  Balances.BalanceEUR,
  Parties.PartyName,
  Parties.PartyGeneralID,
  Parties.PartyAddress,
  Securities.IssuerID,
  Securities.MaturityDate,
  Parties.PartyName, --(Issuers not clients)
  Parties.PartyAddress --(Issuers not clients)
  Parties.PartyGeneralID --(Issuers not clients)

---> здесь я хочу получить данные об эмитентах (адрес и generalID) из таблицы Стороны - Securities.IssuerID = Стороны.PartyID

(поэтому в итоговой таблице будут указаны данные о клиентах из Сторон, а также сведения об эмитенте из таблиц Сторон на основе ID эмитента Я не знаю, как включить это распознавание между идентификаторами клиентов и эмитентов - так что адрес не клиенты, а эмитенты)

from Balances
    LEFT JOIN Parties on Parties.PartyID=Balances.PartyID
    LEFT JOIN Securities on Parties.PartyID=Securities.IssuerID

Ответы [ 2 ]

0 голосов
/ 08 января 2019
SELECT
  BAL.partyName
, BAL.securityName
, BAL.balanceEUR
, PARTY.partyName
, PARTY.partyGeneralID
, PARTY.partyAddress
, SEC.issuerID
, SEC.maturityDate
, ISSUER.partyName AS issuerName
, ISSUER.partyAddress AS issuerAddress
, ISSUER.partyGeneralID AS issuerGeneralId
  FROM balances BAL
  LEFT JOIN parties PARTY on PARTY.partyID = BAL.partyID
  LEFT JOIN securities SEC on BAL.securityName = SEC.securityName
  LEFT JOIN parties ISSUER on SEC.issuerID = ISSUER.partyID

Я предполагаю, что это то, что вы ищете? Странно, что вы используете имя вместо идентификатора для JOIN, но, если это то, что вы получили, используйте его.

0 голосов
/ 08 января 2019

Чтобы выбрать партии для Balances.PartyID, вам нужно будет join на Balances.PartyID = Parties.PartyID. Чтобы выбрать партию для эмитента, вам нужно будет join на Securities.IssuerID = Parties.PartyID. Лучше всего объявлять псевдонимы таблиц в своем выражении select, чтобы вы знали, для чего используется таблица:

Select
  Balances.PartyName
, Balances.SecurityName
, Balances.BalanceEUR
, Parties.PartyName
, Parties.PartyGeneralID
, Parties.PartyAddress
, Securities.IssuerID
, Securities.MaturityDate
, issuer.PartyName as issuerName
, issuer.PartyAddress as issuerAddress
, issuer.PartyGeneralID as issuerGeneralId
from Balances
    LEFT JOIN Parties party on Parties.PartyID=Balances.PartyID
    LEFT JOIN Securities s on Balances.SecurityName = s.securityName -- ? Really?!
    LEFT JOIN Parties issuer on s.IssuerID = issuer.PartyID

Я предположил, что вы получаете от Balances до Securities, используя SecurityName. Это кажется мне ужасным, поэтому, если вы знаете лучше, отредактируйте свой пост и покажите нам, как точно Balanaces и Securities связаны друг с другом.

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