SQL-如何同时更新多个记录?

问题描述

ALTER TABLE Store ADD TotalGoodsPrice INTEGER

CREATE VIEW V AS
SELECT Stock.Store_id,SUM(PRICE*COUNT) total FROM STOCK JOIN PRODUCT
ON STOCK.PRODUCT_CODE = PRODUCT.CODE
GROUP BY Store_id

UPDATE STORE SET STORE.TotalGoodsPrice = V.total
FROM STORE JOIN V ON v.STORE_ID = STORE.ID

所以我有这段代码来更新TotalGoodsPrice,我想基于TotalGoodsPrice来更改Store.ID的每条记录,但是它不会让我更改。我只想到了SELECT MAX(V.total),但这只给了我最高的分数。

解决方法

我怀疑您想要update ... join语法。想法是使用子查询从stockproduct表中计算每个商店的总库存值,然后联接并更新store表:

update store se
inner join (
    select sk.store_id,sum(pt.price * sk.count) total
    from stock sk
    inner join product pt on pt.code = sk.product_code
) sk on sk.store_id = se.id
set se.totalgoodsprice = sk.total

我不得不在每一列所属的表上做一些假设。

请注意,存储此类派生信息通常不是一个好主意-您需要对其进行维护,这可能很乏味。相反,创建视图可能更简单:

create view v_store as
select 
    se.*,(
        select sum(pt.price * sk.count)
        from stock sk
        inner join product pt on pt.code = sk.product_code
        where sk.store_id = se.id
    ) totalgoodsprice
from store se