2016-03-07 117 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