为什么';这个(mysql)联盟不能解决我的问题吗?
我是sql新手。基本上,我试图从一张表中,在某种ID上,求出一笔金额。我得到了那部分,但我也想知道那个人是否活跃,这是从另一张表中得到的。我知道我可以用我的身份证,我也试过和工会合作,但到目前为止运气不好 给出数据为什么';这个(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
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)中没有匹配项,我很抱歉,我的错。