Проблема с объединением таблиц SQL через отношения - PullRequest
3 голосов
/ 15 мая 2019

В настоящее время у меня возникают проблемы при попытке выполнить запрос для некоторых таблиц.

Ниже приведено то, что я пытаюсь сделать, я просто не могу заставить его работать.Я также продублировал составляющую и подарки, чтобы показать вам отношения между льготным кредитом и подарками / составляющими

Ссылка на таблицу Отношения Изображение

SELECT 
    Constituent.lookup_id,
    Constituent.name,
    SplitGifts.amount,
    SplitGifts.giftaidamount
FROM 
    dbo.Gifts Gifts
INNER JOIN dbo.Constituent Constituent
    ON Constituent.id = Gifts.constituent_id
INNER JOIN dbo.SplitGifts SplitGifts
    ON SplitGifts.giftid = Gifts.id
LEFT JOIN dbo.SoftCredit SoftCredit
    ON SoftCredit.giftid = Gifts.id
INNER JOIN dbo.Constituent Constituent_1
    ON Constituent_1.id = SoftCredit.constituentid
INNER JOIN dbo.Gifts Gifts_1
    ON Gifts_1.id = SoftCredit.giftid
INNER JOIN dbo.Package Package
    ON Package.id = SplitGifts.packageid
WHERE 
    Package.lookup_id = N'CORPCHAL'

По сути, я хочусумма и gift_aid_amount из [SplitGifts] Составляющее имя & lookup_id из [конституирующего] для отображения всех подарков, однако, если для этого подарка существует льготный кредит, мне нужно получить те же поля через таблицу [SoftCredit] -> Подарки -> SplitGifts-> Поля

1 Ответ

1 голос
/ 15 мая 2019

Вы можете попробовать, если работает приведенный ниже запрос.

SELECT 
    Constituent.lookup_id,
    Constituent.name,
    SplitGifts.amount,
    SplitGifts.giftaidamount
FROM 
    dbo.Gifts Gifts
    LEFT JOIN dbo.SoftCredit SoftCredit ON SoftCredit.giftid = Gifts.id
    INNER JOIN dbo.Gifts Gifts_1 ON
        Gifts_1.id = SoftCredit.giftid OR
        (SoftCredit.giftid IS NULL AND Gifts_1.id = Gifts.id)
    INNER JOIN dbo.Constituent Constituent ON
        Constituent.id = SoftCredit.constituentid OR
        (SoftCredit.constituentid IS NULL AND Constituent.id = Gifts_1.constituent_id)
    INNER JOIN dbo.SplitGifts SplitGifts ON SplitGifts.giftid = Gifts_1.id
    INNER JOIN dbo.Package Package ON Package.id = SplitGifts.packageid
WHERE 
    Package.lookup_id = N'CORPCHAL'

Он возвращается к таблице Gifts (используя псевдоним Gifts_1) для ссылки на подарок в SoftCredit или к себе, если естьнет SoftCredit.

Таблица Constituent объединяется аналогичным образом: она включается со значением SoftCredit.constituentid, а когда NULL, возвращается к Gifts_1.constituent_id.

ВсеСледующие объединения в отношении подарка должны относиться к Gifts_1 тогда.

Я еще не проверял это.Но это может дать вам подсказку о возможном направлении решения.

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