[英]sql for product price update from exchange rate from multiple table
我有两个表“ curreny”和“ product_price”。 有些商品是进口的,因此我们需要随着货币汇率的变化保持其价格更新。
“ curreny”表保留各种货币的更新汇率。
“ product_price”表保留字段“ main_price”,“ foreign_price”,“ currency_iso”,“ base_currency”
货币表(每日更新)
c_iso rate
---------------
USD 3.0257
EUR 3.3547
产品价格表
id def main_price foreign_price currency_iso base_currency
1 Product1 30.2570 10 USD 1
2 Product2 50 14.904 EUR 0
3 Product3 67.094 20 EUR 1
我需要根据base_currency更新所有产品价格。
例如,对于product1,base_currency为1,这表示USD是产品的实际价格。 因此,根据表“ currency”上的新汇率,产品的foeign_price应该乘以USD汇率。
main_price = foreign_price*rate
对于product2,base_currency为0,这表示main_price是产品的实际价格。 因此,根据表“ currency”上的新汇率,应该用美元汇率来推销产品的价格。
foreign_price = main_price/rate.
我认为这是您需要的更新:
update product_price p join
currency c
on c.c_iso = p.currency_iso
set main_price = (case when p.base_currency = 1
then p.foreign_price * c.rate
else p.foreign_price / c.rate
end)
where p.base_currency in (0, 1);
编辑:
根据评论:
update product_price p join
currency c
on c.c_iso = p.currency_iso
set main_price = (case when p.base_currency = 1
then p.foreign_price * c.rate
else main_price
end),
foreign_price = (case when p.base_currency = 0
then p.foreign_price / c.rate
else foreign_price
end)
where p.base_currency in (0, 1);
在尝试对if / case语句进行多种设置后,我发现了一个有效的代码:
update product_price as p
inner join currency as c on(c.c_iso = p.currency_iso)
set p.main_price = case p.base_currency when true then
p.foreign_price*c.rate when false then p.main_price
end,
p.foreign_price = case p.base_currency when false then
p.main_price/c.rate when true then p.foreign_price
end;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.