繁体   English   中英

SQL更新另一个表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM