使用条件SET语句更新旧值

时间:2015-10-29 00:02:48

标签: mysql

我有一个库存表,其中包含各种商品,例如“牛奶”,“苹果咖啡”,“茶叶”等。这些物品具有数量值。 我的第二个表是orderedItem表。此表包含某些订单,例如Apple' x2,' apple' x3,' milk' x5。

我的查询必须从orderedItem表中选择某些订单行(在我的示例中是一个包含一定数量的' apples' 的订单),获取该订单的数量,并在库存表中的相应行/值中添加/减去该数量。

我如何修复这个SQL查询 - 我认为代码中写的代码是数量FROM orderedItem WHERE productname =' apple''可能会被打破:

query = mysql_query ("
    UPDATE inventory iv
    SET quantity = quantity - (quantity FROM orderedItem WHERE productname='apple')
    WHERE iv.productname = 'apple' ");

1 个答案:

答案 0 :(得分:1)

您可以嵌套选择:

UPDATE inventory iv
    SET quantity = quantity - (select quantity FROM orderedItem WHERE productname ='apple')
    WHERE iv.productname = 'apple' ;

如果多个行匹配条件(或者即使没有),这将不起作用。所以,你可能想要:

UPDATE inventory iv
    SET quantity = quantity - coalesce((select sum(oi.quantity)
                                        from orderedItem oi
                                        where productname = oi.productname
                                       ), 0)
    WHERE iv.productname = 'apple' ;