mysql 如何在sql中将一个表中的和插入到另一个表中

wb1gzix0  于 2023-01-20  发布在  Mysql
关注(0)|答案(1)|浏览(159)

我有这些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
    )
wfsdck30

wfsdck301#

您的子查询只是获取idMat = 1的总和,并将所有股票的金额设置为相同的金额。要正确执行此操作,子查询应与主表相关,而不是在子查询内部使用联接。
但更简单的方法是编写一个分组子查询,然后将其连接到要更新的表。

UPDATE STOCK AS s
JOIN (
    SELECT idMat, SUM(amount) AS total
    FROM Aquisitions
    GROUP BY idMat
) AS a ON s.idMat = a.idMat
SET s.Amount = a.total

相关问题