[英]SQL updating a table selecting from another
为了简化一点,我有一个product
表:
PRODUCT
---
id
type (FK)
以及对应的1:1 type
表( product.type -> type.id
):
TYPE
---
id
weight
然后我有一个packaging
桌。
PACKAGING
---
id
total_weight
一个包装可以容纳一种或多种产品。 packaging.total_weight
是一个便捷字段,用于存储其包含的产品的所有重量的总和。
n * m packaging*products
关系通过nm_packaging_product
表实现:
NM_PACKAGING_PRODUCT
---
packaging_id (PK, FK)
product_id (PK, FK)
现在,有人可以更改产品的重量。 发生这种情况时,我想更新packaging.total_weight
计算新的重量。 我所知道的只是@product_id
的权重已更改。
我想用一个SQL UPDATE
。 喜欢:
UPDATE
PACKAGING
SET
total_weight=???
WHERE
id IN (SELECT packaging_id FROM NM_PACKAGING_PRODUCT WHERE product_id = @prodotto_id)
怎么样?
尝试这个
UPDATE
PACKAGING
SET
total_weight= (select sum(weight) from TYPE,NM_PACKAGING_PRODUCT, PRODUCT
where type.id = product.type and product.id= nm_product.product_id and
nm_packaging_product.packaging_id = packaging.id )
WHERE
id IN (SELECT packaging_id FROM NM_PACKAGING_PRODUCT WHERE product_id = @prodotto_id)
重新计算所有权重,仅重置那些改变的权重:
UPDATE PACKAGING p JOIN
(SELECT packaging_id, SUM(weight) as total_weight
FROM NM_PACKAGING_PRODUCT pp
GROUP BY packing_id
) ppw
ON p.packaging_id = ppw.packaging_id
SET total_weight = ppw.total_weight
where p.total_weight <> ppw.total_weight;
当同一产品多次出现在包装中时,这也将解决该问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.