根据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 ;