@Bodden

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

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

Пишет запрос прошел успешно, но ни чего не происходит.
  • Вопрос задан
  • 83 просмотра
Решения вопроса 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: Если это учебная база данных, то сойдет. А если реально используется такая модель, то не хватает таблицы "Цена продукта по состоянию на".
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы