Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过关系连接SQL表的问题_Sql_Sql Server - Fatal编程技术网

通过关系连接SQL表的问题

通过关系连接SQL表的问题,sql,sql-server,Sql,Sql Server,我当前在尝试运行某些表的查询时遇到问题 下面是我正在尝试做的,我只是无法让它工作。 我还复制了成分和成分,以向您展示软信贷和成分/成分之间的关系 基本上,我想要 金额和礼品\u援助\u金额来自【拆分礼品】 来自[Component]的成分名称和查找\u id显示所有礼物,但是如果该礼物存在软信用,我需要它通过[SoftCredit]表->礼物->拆分礼物->字段获得相同的字段,如果下面的查询有效,您可以尝试 SELECT Constituent.lookup_id, Cons

我当前在尝试运行某些表的查询时遇到问题

下面是我正在尝试做的,我只是无法让它工作。 我还复制了成分和成分,以向您展示软信贷和成分/成分之间的关系

基本上,我想要 金额和礼品\u援助\u金额来自【拆分礼品】
来自[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'