sql从多个表

时间:2016-01-17 20:27:54

标签: mysql sql

我有两张桌子" 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.

2 个答案:

答案 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;