根据SQL中另一个表中的出现情况递减一个表中的值
我试图更新一个表中存在于第二个表中的所有值,每次更新一次 示例根据SQL中另一个表中的出现情况递减一个表中的值,sql,db2,where,Sql,Db2,Where,我试图更新一个表中存在于第二个表中的所有值,每次更新一次 示例feeding\u视图表格: fishnr | food_name | stock -------+-----------+------- 1 | f1 | 25 2 | f1 | 25 3 | f2 | 30 item_name | stock ----------+------- f1 | 25 f2 | 30 f3
feeding\u视图
表格:
fishnr | food_name | stock
-------+-----------+-------
1 | f1 | 25
2 | f1 | 25
3 | f2 | 30
item_name | stock
----------+-------
f1 | 25
f2 | 30
f3 | 10
示例库存
表格:
fishnr | food_name | stock
-------+-----------+-------
1 | f1 | 25
2 | f1 | 25
3 | f2 | 30
item_name | stock
----------+-------
f1 | 25
f2 | 30
f3 | 10
目前我正在尝试这样做:
UPDATE inventory SET stock = stock - 1 WHERE item_name IN (SELECT food_name FROM feeding_view)
发生的情况是f1
只会被递减一次,但我希望它在feeding\u视图中为每个f1
递减一次。因此,f1
的所需库存量为23,f2
的所需库存量为29,而f1
的所需库存量仅减少一次至24
UPDATE inventory AS i
SET stock = stock - COALESCE(
( SELECT COUNT(*)
FROM feeding_view AS f
WHERE f.food_name = i.item_name
), 0 ) ;
或者这个,不确定:
UPDATE
( SELECT i.item_name, i.stock, f.cnt
FROM inventory AS i
JOIN
( SELECT food_name, COUNT(*) AS cnt
FROM feeding_view
GROUP BY food_name
) AS f
ON f.food_name = i.item_name
) AS upd
SET stock = stock - cnt ;