我有一个问题,从不同的表中减去值的和。这就是我的意思。第一表:
id_p | num
-----------
1 | 5
2 | 3第二表:
id_p | num
-----------
1 | 2
1 | 2
2 | 1其结果必须是:
id_p | res
-----------
1 | 1
2 | 2所以对于id_p = 1,它必须是5-2-2=1,对于id_p =23-1= 2,但是我得到这样的结果:
id_p | res
-----------
1 | 6
2 | 2它在内部,左,右,交叉连接中模糊了5,所以它总是给我(5 + 5) - (2 + 2),而不是5- (2 + 2)。请帮助我理解如何在MySQL中做到这一点。而且,它必须在两方面都起作用。
UPD:可能还有其他列,所以它们也会影响复制。
发布于 2022-04-24 13:27:02
有一种方法连接到子查询,该子查询查找这些和:
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;发布于 2022-04-24 14:33:20
另一种方法可能是使用带有id的左联接。
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`发布于 2022-04-24 15:39:11
使用UNION ALL的另一个解决方案
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_phttps://stackoverflow.com/questions/71988836
复制相似问题