我有两张这样的表:
Products(productID,categoryID,price)
MarginOfProfit(categoryID,rate)
任何时候我们想要更改某个类别的产品价格,我们会查看其变化率并将其与原价相符。
例如:
ProductID | CategoryID | Price
1 1 105
2 1 105
CategoryID | Rate
1 0.05
在这个例子中,我们原来的价格是100.所以当我的客户说:“更改所有价格%10”时,我必须先计算原价,并加上%10,比我们的价格为110.
我尝试编写SQL UPDATE查询,但不能。你能提出什么建议?是否可以在MySQL中自动执行此操作。我的意思是定义一些程序或其他东西..
感谢所有愿意帮助的人
答案 0 :(得分:4)
嗯...
UPDATE Price SET Price=Price/(1+OldRate)*(1+NewRate) WHERE CategoryID = 1
最简单的可能是SQL语句,假设您拥有所有值。
这可以使用'CategoryRates'上的触发器来完成吗?表,但它需要两个Rate字段(OldRate,NewRate)
答案 1 :(得分:2)
最好在Products表格中包含OriginalPrice列,而不是在加价后设置价格。
ProductID | CategoryID | OriginalPrice
1 1 100
2 1 100
然后你可以在SELECT(或观看)上做标记:
SELECT *, (OriginalPrice * (1 + Rate)) AS Price
FROM Products
JOIN MarginOfProfit ON Products.CategoryID = MarginOfProfit.CategoryID;
或者,如果您无法更改表结构(这将是不幸的),您可以执行这样的更新:
UPDATE Products
JOIN MarginOfProfit ON Products.CategoryID = MarginOfProfit.CategoryID
SET Price = Price / (1 + Rate) * (1 + YOUR_NEW_RATE)
WHERE Products.CategoryID = 1;
... YOUR_NEW_RATE
将是您设置的新费率。但是,在更改rate
表中的MarginOfProfit
值之前,必须先执行。如果您愿意,可以创建一个stored procedure,它使用NewRate参数并执行UPDATE
个。
答案 2 :(得分:0)
试试这个:
UPDATE FROM Products AS p
JOIN MarginOfProfit as m ON p.CategoryID = m.CategoryID
SET p.Price = p.Price + p.Price*m.Rate