@Bodden

Как взять значение из одной таблицы и прибавить к значению другой таблицы?

Есть две таблицы:
Модератор: здесь должен быть текст, а не изображение.
Как мне взять значение Quantity из первой таблицы(products), значение price из второй таблицы(orderdetails), перемножить между собой и поместить в значение Totalcost таблицы orderdetails?
SELECT products.price, orderdetails.quantity 
FROM products
JOIN orderdetails ON orderdetails.Totalcost = products.price * orderdetails.quantity

Пишет запрос прошел успешно, но ни чего не происходит.
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
@alexalexes
Вывести на просмотр:
SELECT p.price, od.quantity,
          p.price * od.quantity as cost -- в выборке можно не только поля выбирать, но и делать любые сложные матем. операции в пределах сопоставляемых строк и агрегированных функций
FROM products p
JOIN orderdetails od ON p.productid = od.productid --  ну, так соединяйте по ключам. Что мешает?
Where od.orderid = ? -- если нужно ограничиться в пределах заказа

Применить изменения:
update orderdetails
set orderdetails.totalcost = ( select p.price * orderdetails.quantity
                                                from products p
                                              where orderdetails.productid = p.productid
                                            ) -- вычисляем цену из таблицы продуктов и изменяем ее в деталях
where orderdetails.orderid = ? -- если нужно ограничиться в пределах заказа
and exists (select 1
                    from products p
                    where orderdetails.productid = p.productid
                  ) -- выбираем детали заказа только по тем продуктам, которые есть в продуктах, можно добавить доп. ограничения по затрагиваемым деталям

Можно навешать триггер на вставку, изменение таблицы orderdetails. Тогда при изменении количества, цена будет пересчитываться с помощью него автоматически.
Основа триггера:
update orderdetails
set orderdetails.totalcost = ( select p.price * new.quantity
                                                from products p
                                              where orderdetails.productid = p.productid
                                            ) -- вычисляем цену из таблицы продуктов и изменяем ее в деталях
where orderdetails.orderdetailid = new.orderdetailid

PS: Если это учебная база данных, то сойдет. А если реально используется такая модель, то не хватает таблицы "Цена продукта по состоянию на".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы