2016-03-07 81 views
1

我试图在我的order_details表中添加一个名为'price'的列。我希望它能根据其他表格中产品的不同价格来计算价格。在mysql中添加一个计算列

alter table order_detail add column Price decimal(5,2) as 

(CASE (order_detail.item_id, 
     item.item_id, 
     bagel.item_id, 
     bagelfilling.item_id, 
     Item.price, 
     bagelfilling.price, 
     order_detail.quantity, 
     order_detail.discount, 
     drink_sizes.price, 
     drink.item_id) 

     WHEN (order_detail.item_id = item.item_id) AND (item.item_ID = bagel.item_id) AND (bagel.item_id = bagelfilling.item_id) 
      THEN ((Item.price + bagelfilling.price)*order_detail.quantity)-order_detail.discount 


     WHEN (order_detail.item_id = item.item_id) AND (item.item_ID = drink.item_id) 
      THEN ((Item.price + drink_sizes.price)*order_detail.quantity)-order_detail.discount 

     WHEN (order_detail.item_id = item.item_id) AND (item.item_ID = bagel.item_id) 
      THEN (Item.price*order_detail.quantity)-order_detail.discount 

     WHEN (order_detail.item_id = item.item_id) AND (item.item_ID = drink.item_id) 
      THEN (Item.price*order_detail.quantity)-order_detail.discount 

      else 0.00 

      end) 

我一直运行到这个错误:

Error Code: 1241. Operand should contain 1 column(s).

我该如何解决这个问题?我需要在创建表格或添加数据时计算价格。

回答

1
  1. 您不能在计算字段的表达式中引用来自其他表的字段,因为不允许子查询。所以,即使我们为你解决了语法错误,它也不会起作用。该任务似乎需要触发器,存储过程或视图。

  2. 即使您可以在case关键字后面有一个表达式,列名列名也不是有效的表达式,因为它不返回单个值。

+0

我明白了。那么你如何制定这个程序 – Tochi

+1

1.这是一个不同的问题,所以请在自己的帖子中提出。 2.提供更多关于你想要达到什么的细节,以及你如何在新文章中试图解决它。因为基于上述,即使我想,我也不能回答你的新问题。 – Shadow