mysql - 使用中间表用相关表的总和值更新一个表的值
问题描述
我有三个表 A、A_B 和 B。
由于 mySQL 不支持多对多关系,因此表 A 和 B 通过中间表 A_B 相互关联。
Table A: Table A_B: Table B:
aId aCount aId bId bId bCo
1 10 1 1 1 4
2 15 1 2 2 5
3 20 2 1 3 6
3 2 4 7
3 4
现在我想将每个 bId 的 bCount 添加到每个相关的 aCount 中。
期望的结果:
Table A: Remark:
aId aCount (Current aCount + all related bCounts)
1 19 (10 + 4 + 5)
2 19 (15 + 4)
3 32 (20 + 5 + 7)
MySQL知识太基础了。
我可以创建一个 SELECT 查询,它给我一个结果表,就像我希望表 A 在更新后看起来一样,但我无法创建更新语句。我尝试的一切都会导致语法错误或不希望的结果。我也有一个可能有效的声明,但执行起来需要很长时间。现在我只是对该怎么做感到困惑。
所需的结果如下所示:
SELECT `aId`, aCount + SUM(`bCount`) as `aCount` from `A`
INNER JOIN `A_B` ON `A_B`.`aId` = `A`.`aId`
INNER JOIN `B` ON `B`.`bId` = `A_B`.`bId`
GROUP BY `aId`;
是否可以通过单个查询进行我想要的更新,还是需要多个(性能方面)?
任何人都可以帮助我解决方法或创建陈述吗?
解决方案
试试下面:https ://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=0b6a287d41eed001710e94612c4228ba
select x.id,x.val,sum(tableb.val)+x.val as vals from
(select * from tablea inner join tableab on tablea.id=tableab.id1) x inner join
tableb on x.id2=tableb.id
group by x.id,x.val,id1
输出:
id val vals
1 10 19
2 15 19
3 20 32
更新表格:
UPDATE tablea INNER JOIN
(SELECT x.id, x.val, SUM(tableb.val) + x.val as vals FROM
(SELECT * FROM tablea INNER JOIN tableab ON tablea.id = tableab.id1) x INNER JOIN
tableb ON x.id2 = tableb.id
GROUP BY x.id, x.val, id1)Z ON tablea.id=Z.id
SET tablea.val = Z.vals;
推荐阅读
- python-3.x - form.validate_on_submit() 缺少 1 个必需的位置参数:'self'
- azure-devops - Azure Dev Ops/VSTS 查询以返回与特定史诗相关的 PBI,其层次结构为 Epic -> Feature -> PBI
- java - 公用表表达式,以值开头的语句在 java 中给出错误
- python - 将 Python NumPy 数组插入 PostgreSQL 数据库
- shell - 运行 unix 脚本后获取日期非法选项
- java - 使用 JAX-RS Servlet 获取请求不受支持的媒体错误
- mysql - 如何使用存储键的表中的 SQL 从键/值字典中返回值?
- javascript - 为什么背景图像幻灯片放映延迟?
- sql-server - 根据 id 编号行
- llvm - 如何使用 LLVM JIT 在 windows 上执行 c++ ir 代码