[英]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.