mysql - 如何根据聚合函数的结果更新属性
问题描述
我是 mySQL 的新手。我想根据零售价的值和订购的产品数量来更新表格的订单价格。我有以下表格(针对这个问题进行了简化):
Products
:
ProductID
Retail_price
Sales_orders
:
SalesOrdersID
Order_price //This is the derived attribute that I want to update when the below Sales_products table is updated.
Sales_products
:
SalesOrdersID
ProductID
Quantity
以下代码的工作原理是我得到了正确的Order_price
结果,它在自己的表中输出。但我想更新属性Sales_orders.Order_price
,而不是在表格中调出订单价格。
SELECT
sales_product.SalesOrdersID,
SUM(Quantity * Retail_price) as "Total price of order"
FROM
sales_product
LEFT JOIN products ON sales_product.ProductID = products.ProductID
GROUP BY sales_product.SalesOrdersID
我也尝试过触发器,但是当我尝试在Sales_orders
.
CREATE trigger find_order_price2
AFTER INSERT ON Sales_products
FOR EACH ROW
BEGIN
DECLARE price int;
SELECT
sales_product.SalesOrdersID, SUM(Quantity * Retail_price) INTO price
FROM
sales_product
LEFT JOIN
products ON sales_product.ProductID = products.ProductID;
UPDATE sales_orders
set Order_price = price;
END;
$$
DELIMITER ;
返回错误:
错误代码:1222。使用的 SELECT 语句具有不同的列数
希望有人可以帮助解决这个问题?
解决方案
以下触发代码应该可以完成工作:
DELIMITER $$
CREATE trigger update_sales_order_price
AFTER INSERT ON Sales_products
FOR EACH ROW
BEGIN
UPDATE Sales_orders so
SET Order_price = (
SELECT SUM(sp.Quantity * p.Retail_price)
FROM Sales_products sp
INNER JOIN Products p ON p.ProductID = sp.ProductID
WHERE sp.SalesOrdersID = so.SalesOrdersID
)
WHERE SalesOrdersID = NEW.SalesOrdersID;
END;
$$
DELIMITER;
考虑以下布局:
产品:
| ProductID | retail_price |
| --------- | ------------ |
| 1 | 10 |
| 2 | 20 |
销售产品:
| SalesOrdersID | ProductID | Quantity |
| ------------- | --------- | -------- |
| 1 | 1 | 10 |
销售订单:
| SalesOrdersID | Order_price |
| ------------- | ----------- |
| 1 | 100 |
现在,有了触发器,我们在Sales_items
表中插入一条与同一个 sales_order 相关的新记录:
insert into Sales_products values(1, 2, 10);
插入后,这里是Sales_orders
表的(更新的)内容:
| SalesOrdersID | Order_price |
| ------------- | ----------- |
| 1 | 300 |
推荐阅读
- php - 通过 Vue / Axios 发送选定的按钮名称
- python - 如何在类中实现 websocket?
- vba - 从 Excel 单元格完成 VBA 用户表单文本框
- javascript - Phaser 3 es6:如何创建 Player 类?
- c# - Powershell 运行空间写保护变量(不可替换)
- php - php会话不保存变量
- python - 如何在数据框中获取一列模糊分数(将一个字符串与一列字符串进行比较),python
- angular - 在多个(循环)输入上使用 ngModel
- gcc - Lua 模块 - 如何不包含 Lua 核心?
- python - bigrams python的CountVectorize词汇规范