2017-10-14 97 views
0

我有以下DB结构更新减去数量 - SQL

Table product(持有我的产品信息,包括股票)

  • PROD_ID
  • PROD_NAME
  • prod_desc
  • prod_price
  • 股票

store_orders_item

  • ID
  • ORDER_ID
  • sel_prod_id
  • sel_prod_price
  • sel_prod_qty

我(这是每一个客户从我的网站上购买时更新)需要我每次在网上进行销售和store_orders_items是更新,减少对表product

我想我需要使用下面的代码所售产品的股票领域,再加上某种连接或子查询根据prod_id来更新我的产品表,但我无法弄清楚如何。

UPDATE product SET stock = stock - (SELECT SUM(sel_prod_qty) FROM store_orders_items); 

我也试过:

UPDATE product 
SET stock = stock - (SELECT s.sel_prod_qty, s.sel_prod_id, p.prod_id 
FROM store_orders_items as s left join product as p ON 
s.sel_prod_id=p.prod_id WHERE order_id=(SELECT MAX(order_id) from orders_number)); 

而得到这个错误: “你不能指定目标表‘产品’的更新在FROM子句”

+0

我尝试添加这一行但不起作用。 WHERE prod_id =(SELECT sel_prod_id FROM store_orders_items); – mosinskis

+0

这是错误的方法。从库存水平中扣除特定订单数量 - 就是这样。因此,当您创建新订单时,创建新的store_orders_items,并在另一个语句中,从股票中减去相同的金额 - 仅使用输入金额而不使用store_orders_items表。 –

回答

0

必须使用加入更新,例如在MySQL中:

UPDATE 
    product p 
INNER JOIN 
    store_orders_item s 
ON 
    p.prod_id = s.sel_prod_id 
SET 
    p.stock = p.stock - s.sel_prod_qty 
WHERE 
    s.order_id = NNNNN 

其中NNNNN是刚刚插入的订单的ID。