2016-03-07 2 views
1

Я пытаюсь добавить столбец «цена» в таблицу order_details. Я хочу, чтобы он вычислил цену из разных цен на продукты из других таблиц.Добавление вычисленного столбца в 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. Даже если вы можете иметь выражение после ключевого слова, имена столбцов столбцов не являются допустимым выражением, так как оно не возвращает ни одного значения.

+0

Я вижу. как бы вы сделали процедуру для этого, тогда – Tochi

+1

1. Это другой вопрос, так что спросите его в своем посте. 2. Предоставьте более подробную информацию о том, чего вы пытаетесь достичь, и о том, как вы пытались решить эту проблему в новой должности. Потому что, основываясь только на этом, я не могу ответить на ваш новый вопрос, даже если бы захотел. – Shadow