通过关系连接SQL表的问题
我当前在尝试运行某些表的查询时遇到问题 下面是我正在尝试做的,我只是无法让它工作。 我还复制了成分和成分,以向您展示软信贷和成分/成分之间的关系 基本上,我想要 金额和礼品\u援助\u金额来自【拆分礼品】通过关系连接SQL表的问题,sql,sql-server,Sql,Sql Server,我当前在尝试运行某些表的查询时遇到问题 下面是我正在尝试做的,我只是无法让它工作。 我还复制了成分和成分,以向您展示软信贷和成分/成分之间的关系 基本上,我想要 金额和礼品\u援助\u金额来自【拆分礼品】 来自[Component]的成分名称和查找\u id显示所有礼物,但是如果该礼物存在软信用,我需要它通过[SoftCredit]表->礼物->拆分礼物->字段获得相同的字段,如果下面的查询有效,您可以尝试 SELECT Constituent.lookup_id, Cons
来自[Component]的成分名称和查找\u id显示所有礼物,但是如果该礼物存在软信用,我需要它通过[SoftCredit]表->礼物->拆分礼物->字段获得相同的字段,如果下面的查询有效,您可以尝试
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'
它在SoftCredit
中的礼品参考上连接回表Gifts
(使用别名Gifts\u 1
),如果没有SoftCredit
,则连接回表本身
表component
以类似的方式联接:它根据SoftCredit.componentid
的值联接,当为空时,返回到Gifts\u 1.componential\u id
关于礼物的所有下一个连接应参考Gifts\u 1
then
不过我还没有测试过。但它可能会给您一个可能的解决方案方向的提示。所有这些括号都使查询难以阅读。跳过它们,而是确保按正确的顺序编写联接。您好,很抱歉,我确实包含了一个指向图像的链接,以尝试更好地解释它。您可以尝试一下我刚才编辑的查询吗?我在您的联接中找不到包引用,因为您在where子句中使用它作为-where(“包”。“lookup\u id”=N'CORPCHAL')我已经更新了帖子,并将一个新的图片包含在包裹查找中。附有软信用的礼物显示的是原始的成分名称,而不是该查询中的软信用成分名称。谢谢你这么想啊。在这种情况下,也许可以使用相同的策略来连接
成分表。我将更新我的答案。我不确定SoftCredit.Constructentid
字段是否可以为空。如果它是空的,它也将回到礼物的组成部分。
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'