Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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
为什么';这个(mysql)联盟不能解决我的问题吗?_Mysql_Sql_Group By - Fatal编程技术网

为什么';这个(mysql)联盟不能解决我的问题吗?

为什么';这个(mysql)联盟不能解决我的问题吗?,mysql,sql,group-by,Mysql,Sql,Group By,我是sql新手。基本上,我试图从一张表中,在某种ID上,求出一笔金额。我得到了那部分,但我也想知道那个人是否活跃,这是从另一张表中得到的。我知道我可以用我的身份证,我也试过和工会合作,但到目前为止运气不好 给出数据p.inactive SELECT p.inactive FROM deb d RIGHT JOIN pat p ON(d.debitor = p.cpr); d.amount有效,但p.inactive无效,因为左连接 SELECT SUM(d.amount), p.ina

我是sql新手。基本上,我试图从一张表中,在某种ID上,求出一笔金额。我得到了那部分,但我也想知道那个人是否活跃,这是从另一张表中得到的。我知道我可以用我的身份证,我也试过和工会合作,但到目前为止运气不好

给出数据
p.inactive

SELECT p.inactive
FROM deb d
    RIGHT JOIN pat p ON(d.debitor = p.cpr);
d.amount
有效,但
p.inactive
无效,因为
左连接

SELECT SUM(d.amount), p.inactive
FROM deb d
    LEFT JOIN pat p ON(d.debitor = p.cpr)
GROUP BY d.debitor;
(   SELECT d.debitor, p.inactive FROM deb d 
        LEFT JOIN pat p ON d.debitor = p.cpr
)
UNION
(
    SELECT d.debitor, p.inactive FROM deb d 
        RIGHT JOIN pat p ON d.debitor = p.cpr
    WHERE d.debitor IS NULL
);
所以我尝试将它们与联合结合,但是
p.inactive
仍然是
null

SELECT SUM(d.amount), p.inactive
FROM deb d
    LEFT JOIN pat p ON(d.debitor = p.cpr)
GROUP BY d.debitor;
(   SELECT d.debitor, p.inactive FROM deb d 
        LEFT JOIN pat p ON d.debitor = p.cpr
)
UNION
(
    SELECT d.debitor, p.inactive FROM deb d 
        RIGHT JOIN pat p ON d.debitor = p.cpr
    WHERE d.debitor IS NULL
);
我现在累坏了?有人能帮忙吗?甚至可以不看我的DB。如果我需要提供更多数据/信息,请告诉我

更新

表deb

借方|金额

1…|…10

1…|…20

1…|…45

2........30

2.......10

表格pat

心肺复苏…|…无效

1…|…0

2…|…1

3…|…0

4…|…0

5…|…1

6........1


p.cpr和d.debitor=1的人,总金额为75,不活跃

p.cpr和d.debitor=2的人员,总金额为40,且处于活动状态

最终更新:


我的错,我假设在pat.cpr中有一些deb.debitors,但没有,因此没有匹配项。下一次,我将测试第一个步骤。

假设debitor-cpr是多对一联接的,您可以使用左侧联接示例,但在GROUP BY子句中包含所需的列:

SELECT SUM(d.amount), p.inactive
FROM deb d
LEFT JOIN pat p ON d.debitor = p.cpr
GROUP BY d.debitor, p.inactive;
或者,您可以在分组后加入(这允许您包括通常无法在group by中使用的列):


PS:如果要从右表中消除空值,则需要一个
内部联接

因此
d.debitor
是指向
p.cpr
的外键
也许我遗漏了什么,但在这种情况下,解决方案看起来非常简单:

SELECT    pat.cpr,
          pat.inactive,
          COALESCE(SUM(deb.amount), 0) AS sum_amount
FROM      pat
LEFT JOIN deb
       ON pat.cpr = deb.debitor
GROUP BY  pat.cpr,
          pat.inactive;

如果某个特定的
pat没有对应的
deb.debitor
,它将返回总额0。cpr
p.cpr
d.debitor
的外键,反之亦然?请提供一些样品data@radbyx
其中d.debitor为空
在第一次联合查询中不需要?
d.debitor
是唯一的吗<代码>p.cpr是否唯一?请提供一些示例数据和所需结果,以便我们了解两个表之间的关系。我的意思是,它不是主键,而是外键。e、 g.d.借方匹配p.cpr的。。。如果这有意义的话?@RobertKock在我上次的查询中,我试图在mysql中建立一个联盟,我想这就是你完全加入mysql的方式。但一定是出了什么问题。好的,我试试看。Debitor和cpr不是主键,但cpr是外键,Debitor的格式相同,因此您也可以使用它。希望它能充分解释,我是sql新手,否则请告诉我。我认为您的第一个查询看起来像我的第二个查询,对吗?我看不出有什么不同。它产生相同的结果。我在group by中添加了
p.inactive
。如果没有它,您的第二个查询将是非法的,但MySQL允许。我已将“p.invental”替换为“p.inactive”,但它仍然为我提供空值。根据您的示例数据,两个查询都提供了预期的结果。如果您得到NULL,那么您的数据中就有deb.debitor,这在pat.cpr中是不存在的。sum列都是0(因为合并将NULL更改为0)。我相信你像萨尔曼一样了解你的情况,但我不知道如何更好地描述我的情况。我花了一个小时写我的问题,所以我付出了很多努力,但我仍然觉得我在这方面做得最多。我知道答案对你来说很简单,但我需要很好地组织这个问题,并提供一个样本或其他东西,让它对你来说更简单、更清楚。哦,我在(pat.cpr=deb.debitor)中没有匹配项,我很抱歉,我的错。