SQL:来自另一个分组表

时间:2016-03-08 10:54:05

标签: mysql sql

我有两张桌子:

产品(P1)

id,   
amount

价格(P2)

id  
productId  
calibre  
amount  

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

例如,来自

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语法。

如果有人知道......

谢谢。

2 个答案:

答案 0 :(得分:1)

由于您没有标记您的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 ...然后改变总和(p2。金额):

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

选择适合你的那个

答案 1 :(得分:1)

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

<强> 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 Server:

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。