首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同表中的SQL重复行减( MySQL )

不同表中的SQL重复行减( MySQL )
EN

Stack Overflow用户
提问于 2022-04-24 13:23:03
回答 3查看 37关注 0票数 2

我有一个问题,从不同的表中减去值的和。这就是我的意思。第一表:

代码语言:javascript
复制
id_p | num
-----------
1    | 5
2    | 3

第二表:

代码语言:javascript
复制
id_p | num
-----------
1    | 2
1    | 2
2    | 1

其结果必须是:

代码语言:javascript
复制
id_p | res
-----------
1    | 1
2    | 2

所以对于id_p = 1,它必须是5-2-2=1,对于id_p =23-1= 2,但是我得到这样的结果:

代码语言:javascript
复制
id_p | res
-----------
1    | 6
2    | 2

它在内部,左,右,交叉连接中模糊了5,所以它总是给我(5 + 5) - (2 + 2),而不是5- (2 + 2)。请帮助我理解如何在MySQL中做到这一点。而且,它必须在两方面都起作用。

UPD:可能还有其他列,所以它们也会影响复制。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-24 13:27:02

有一种方法连接到子查询,该子查询查找这些和:

代码语言:javascript
复制
SELECT t1.id_p, t1.num - COALESCE(t2.num, 0) AS res
FROM table1 t1
LEFT JOIN
(
    SELECT id_p, SUM(num) AS num
    FROM table2
    GROUP BY id_p
) t2
    ON t2.id_p = t1.id_p
ORDER BY t1.id_p;
票数 1
EN

Stack Overflow用户

发布于 2022-04-24 14:33:20

另一种方法可能是使用带有id的左联接。

代码语言:javascript
复制
SELECT f.`id`, f.`num`-SUM(s.`num`) FROM `first_table` f 
LEFT JOIN `second_table` s ON s.`id`=f.`id` GROUP BY f.`id`
票数 0
EN

Stack Overflow用户

发布于 2022-04-24 15:39:11

使用UNION ALL的另一个解决方案

代码语言:javascript
复制
select id_p, sum(num) as sum_num from ( -- calculate sum
  -- union 2 tables 
  select * from t1
  union all
  select id_p, -num from t2
) t group by id_p; -- group by id_p

MySQL在线沙箱

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71988836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档