在没有 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 的左连接,而不是连接,取决于你的数据,你可以检查它
注意:全部在测试环境中完成
问题
我有 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
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 的左连接,而不是连接,取决于你的数据,你可以检查它