我有两张桌子" curreny"和" product_price"。有些商品是进口的,所以我们需要在货币汇率变化时保持价格更新。
" curreny"表保持各种货币的更新货币汇率。
" PRODUCT_PRICE" table保留字段" main_price"," foreign_price"," currency_iso"," base_currency"
Curreny表(每日更新)
c_iso rate
---------------
USD 3.0257
EUR 3.3547
Product_price表
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是产品的实际价格。因此根据表格中的新费率"货币"产品的foeign_price应乘以美元汇率。
main_price = foreign_price*rate
对于product2 base_currency是0,这意味着main_price是产品的实际价格。因此根据表格中的新费率"货币"产品的foeign_price应按美元汇率计算。
foreign_price = main_price/rate.
答案 0 :(得分:0)
我认为这是您需要的更新:
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);
答案 1 :(得分:0)
在尝试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;