2

我正在尝试更新一个表中存在于第二个表中的所有值,每次出现一次。

示例feeding_view表:

fishnr | food_name | stock
-------+-----------+-------
1      | f1        | 25
2      | f1        | 25
3      | f2        | 30

示例inventory表:

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只是减少一次,但我希望它f1feeding_view. 因此,所需的库存为f123,而 forf2为 29,但f1仅减少一次至 24。

4

1 回答 1

1
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 ;
于 2012-11-23T21:41:54.267 回答