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