我有这些table
Categories: Materials:
Id|Name Id|Name|IdCateg
1 |C1 1 |N1 |1
2 |C2
3 |C3
Materials:
Id|Name|IdCateg
1 |N1 |1
2 |N2 |1
3 |N3 |2
4 |N4 |2
5 |N5 |3
6 |N6 |3
Acquisitions:
Id|IdMat|Amount
1 | 1 | 10
2 | 1 | 5
3 | 1 | 30
4 | 2 | 23
5 | 2 | 10
因此,我需要在表STOCK中输入表Acquisitions中的金额总和,其中IdMat与以下内容相同
STOCK:
Id|IdMat|Amount
1 | 1 | 45
2 | 2 | 33
我该怎么做呢?
我尝试过这样做,但它在每个id上都用相同的值更新它:
update STOCK
set Amount=
(
select sum(a.Amount)
from AQUISITIONS a JOIN STOCK s
ON s.IdMat=a.IdMat
WHERE(s.IdMat=1)
)
where exists
(
select 1
from AQUISITIONS a JOIN STOCK s
ON s.IdMat=a.IdMat
)
1条答案
按热度按时间wfsdck301#
您的子查询只是获取
idMat = 1
的总和,并将所有股票的金额设置为相同的金额。要正确执行此操作,子查询应与主表相关,而不是在子查询内部使用联接。但更简单的方法是编写一个分组子查询,然后将其连接到要更新的表。