【发布时间】:2013-09-04 13:24:42
【问题描述】:
我有三张桌子:
- 套件(kit_id、kit_weight)
- Kit_Components(kit_id、数量、component_id)
- 组件(component_id、重量)
对于 kits 表中的每个条目,可以有一个或多个 Kit_Component 条目。每个组件都有一个权重列,如果我们还没有称重,它可以是权重或 null。我需要做的是运行 SQL 查询来更新 Kits 表的权重列,基于其所有组件的总重量乘以数量,或者如果任何权重为空,则将其值设置为空,但我什至不确定有可能吗?
注意:我想避免使用脚本、触发器或过程。我有代码可以在保存组件或更新套件时执行此操作,但我希望能够批量执行此操作。
编辑:为了进一步澄清,我可以对权重 * 数量求和,但这不涉及为 NULL 的组件行,因为 NULL 在 SUM 中充当 0(我已经对此进行了测试)
例如Kit1 有 1xComponentA,权重为 14,2xComponentB,权重为 NULL
SELECT kit_id, SUM(component.weight * kit_component.quantity) FROM kit_component INNER JOIN component ON kit_component.component_id = component.id GROUP BY kit_component.kit_id
这将为 kit1 返回 14,但是这是错误的,因为 ComponentB 没有权重,因此应该返回 NULL。
Hugo Kornelis: “如果组中的数据(由 GROUP BY 组成)有一些 NULL 和一些 非 NULL 数据,NULL 被忽略,结果是 剩余数字:SUM {1, 3, NULL, 5} = SUM {1, 3, 5} = 9 如果组中的所有数据都是 NULL,则 NULL 也将被忽略,留下 根本没有要求和的行:结果是空集的总和;经过 定义这是NULL。 SUM {NULL, NULL} = SUM {} = NULL。”
【问题讨论】:
-
您可能需要一个 UPDATE 语句。以及聚合子查询上的 SUM()。甚至可能是乘法!!!
-
为什么需要group by子句,没有它你得到你想要的
-
@ilan-berci 有什么不同吗?
标签: mysql