注意:这一切都是在测试环境中完成的
问题
我有3张桌子
- 发票
- 产品
- 他们之间的联系
现在我需要使用产品中的一些值来更新每张发票。
问题
如果不迭代ID
到目前为止我尝试了什么
1.SELECT我需要的数据
SELECT INV.id, INV.to_update, SUM(PRO.update_from)
FROM invoices INV
LEFT JOIN connecting CNN ON CNN.id_inv=INV.id
LEFT JOIN products PRO ON PRO.id = CNN.id_prod
GROUP by INV.id;
它会显示正确的值
2.更新迭代槽ID(PHP / C#或其他语言)
UPDATE invoices INV SET INV.to_update=
(SELECT SUM(PRO.update_from)
FROM connecting CNN
LEFT JOIN products PRO ON PRO.id=CNN.id_prod
WHERE CNN.id_inv="+id+")
WHERE INV.id="+id+"
问题
我不能使用任何"循环"形成PHP,或c#或任何其他语言。我需要在SQL中做到这一点。那么有没有办法在SQL中执行此操作而无需选择所有ID的发票,并通过它们进行迭代?
解释和表格
我被迫在这个数据库上工作。每个产品都有update_from
列,并带有值。我需要汇总此发票中所有产品的所有值,并将此SUM放入发票列之一(如果将来update_from
更改了产品,则需要保留相同的发票。
重要的栏目:
发票:ID, to_update
//需要将SUM放入该列
正在连接:ID, id_prod, id_inv
//产品ID和发票ID
产品:ID, update_from
//需要SUM
当然,1张发票可能有很多产品,因此" SUM" update_from
答案 0 :(得分:2)
您可以使用SQL代码完成所需的更新:
UPDATE invoices
JOIN connecting
ON invoices.id = connecting.id_inv
JOIN products
ON products.id= connecting.id_prod
SET invoices.to_update= SUM(products.update_from)
注意:我不确定你可能需要使用ifnull的left join,而不是join,取决于你的数据,你可以检查它
答案 1 :(得分:-1)
UPDATE invoices
SET to_update = (
select sum(p.update_from)
FROM invoices i2 join connecting c on c.id_inv = i2.id
join products p on p.id = c.id_prod
where i2.id = invoices.id)