在没有 ID 迭代的情况下更新整个 table

Updating whole table without ID iteration

注意:全部在测试环境中完成

问题
我有 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.Update 遍历 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+"

问题
我不能使用任何 "loop" 形式 PHP 或 c# 或任何其他语言。我需要在 SQL 中完成。那么有没有办法在 SQL 中做到这一点而无需选择所有发票 ID 并遍历它们?

解释和表格
我被迫在这个数据库上工作。每个产品都有 update_from 列,带有一个值。我需要对这张发票中所有产品的所有值求和,并将此 SUM 放入发票列之一(以防将来 update_from 更改产品,发票需要保持不变。

重要的列:
发票:ID, to_update //需要将SUM放入该列
Connecting: ID, id_prod, id_inv //产品id,发票id
产品:ID, update_from //需要对

求和

当然,一张发票可能有很多产品,因此 update_from

的 "SUM"
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)

您可以使用 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 的左连接,而不是连接,取决于你的数据,你可以检查它