我有两张桌子:
产品(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语法。
如果有人知道......
谢谢。
答案 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。