繁体   English   中英

用一个值更新多行并将其划分到单个 SQL 查询中的不同行

[英]Update multiple rows with one value and divide it to the different row in single SQL query

基本上我有两个表 itemTable 和 stockTable,每次添加库存时,我都会获取 itemId 的外键并将其与数量一起添加到 stockTable 中。

我想每次客户购买产品时更新 stockTable 中的库存数量。

问题:例如,客户将购买 7 件衬衫:所以首先将更新 STOCKID (3) QUANTITY OF 4 SECOND 将更新 STOCKID (6) QUANTITY OF 3

所以更新数量后,衬衫的总库存为 3

股票 (3) 将变成 0 股票 (6) 将变成 3

我如何在 SQL 中查询。 谢谢你!

TOTAL STOCKS: (Base on the same itemName)
SHOES - 5
SHIRT - 10
BALL  - 15

stockTable

stockId   itemId    stockQuantity  stockOut
1           35             5
3           89             4 
6           11             6
14          87             15

itemTable

itemId    itemName     itemSellPrice  supplierName
35           shoes          50          Jason
89           shirt          40          Jacob
11           shirt          65          Max
87           ball           150         Sam

首先,您需要确定必须更新的 itemId(s),它们在结果中:

SELECT itemId FROM itemTable WHERE itemName = 'shirt'

话虽如此,更新查询将如下所示:

UPDATE stockTable SET ... WHERE itemId IN (SELECT itemId FROM itemTable WHERE itemName = 'shirt')

显然,现在我们需要更新数量,这必须逐步完成,直到从最低的 itemId 开始完成订单(例如):

SELECT IF(stockQuantity>7,@remaining_qty:=stockQuantity-7,@remaining_qty:=@remaining_qty-stockQuantity) AS `remaining_qty` FROM stockTable WHERE itemId IN (SELECT MIN(itemId) FROM itemTable WHERE itemName = 'shirt';

UPDATE stockTable SET stockQuantity=IF(stockQuantity>7,stockQuantity-7,0) WHERE itemId IN (SELECT MIN(itemId) FROM itemTable WHERE itemName = 'shirt');

之后,您可以检查变量@remaining_qty,并重复这些内容直到@remaining_qty>0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM