繁体   English   中英

SQL:从另一个分组表更新表

[英]SQL : update table from another grouped table

我有两张桌子:

产品 (P1)

id,   
amount

价格(P2)

id  
productId  
calibre  
amount  

我想更新 P1 amount列,使其等于每个productId的 P2 amount列的总和。

例如,从

P1

'apple',0  
'orange,0  

P2

'apple', 'A', 5  
'apple', 'B', 6  
'orange' 'AA',1  
'orange' 'BBB', 3  
'orange', 'CCC', 4  

更新后,P1 是这样的:

'apple', 11  
'orange', 8

我找不到实现此目的的 SQL 语法。

如果有人知道...

谢谢你。

由于您没有标记您的 DBMS,我认为这对大多数 DBMS 来说都是正确的:

UPDATE P1
SET p1.amount = (SELECT sum(p2.amount) FROM P2
                 WHERE p1.productID = p2.productID)

如果 p1 可以有不会出现在 p2 中的产品,您应该使用 nvl 函数 - 每个 dbms 可以有不同的函数来处理空值 - coalesce,nvl ETC ... 然后将 sum(p2.amount) 更改为:

COALESCE(sum(p2.amount),0)
NVL(sum(p2.amount),0)

选择适合您的那一款

执行UPDATE查询的最有效方法是使用包含P2总和的临时表对P1执行INNER JOIN

MySQL:

UPDATE P1
INNER JOIN
(
    SELECT productId, SUM(amount) AS amount
    FROM P2
    GROUP BY productId
) t
    ON P1.id = t.productId
SET P1.amount = t.amount

SQL 服务器:

UPDATE P1
SET P1.amount = t.amount
FROM P1 INNER JOIN
(
    SELECT productId, SUM(amount) AS amount
    FROM P2
    GROUP BY productId
) t
    ON P1.id = t.productId

我希望您的数据库是 MySQL 或 SQL Server。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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