我有三张桌子:
- 套件(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。”