视图中的条件 Select - MYSQL

Conditional Select in View - MYSQL

我有一个视图需要显示项目的转换价格。 我有 2 tables 加入 Item_Price & FX_Rate

简化示例:

项目table 百万数据

IP.ITEM Item_Price.PRICE Item_Price.CURRENCY
Apple 1 USD
Orange 77 INR
Avocado 22 MXN
Pear 0.9 USD_OLD

外汇汇率 table 持续更新实时汇率

FX_Rate.CURRENCY FX_Rate.FX
USD 1
INR 0.013
MXN 0.049
USD_OLD 1.79

两个 table 结构都无法修改,因此我创建了一个视图来显示商品的标准化价格:

CREATE VIEW USD_ITEMS AS
  SELECT 
    IP.NAME AS NAME,
    (Item_Price.PRICE * FX_Rate.FX) AS USD_price
    ...
    FROM 
      Item_Price IP
      JOIN FX_Rate FX ON( 
        IP.CURRENCY = FX.CURRENCY
      )

虽然一切都将随之而来, USD_OLD 现已过时,所有以 USD_OLD 为货币的项目都需要使用美元的汇率换算

我尝试使用 IF / CASE WHEN 但我无法找到一种方法来故意切换 FX,其中 CURRENCY='USD_OLD'

伪代码错误? :

CASE USD_price 
  WHEN FX_Rate.CURRENCY='USD_OLD' 
    THEN (Item_Price.PRICE * FX_Rate.FX WHERE FX_Rate.CURRENCY='USD_OLD')   
  ELSE (Item_Price.PRICE * FX_Rate.FX)

我知道以上是不可能的,因为视图是 JOIN ON Item_Price.CURRENCY = FX_Rate.CURRENCY

视图中的临时 table 会有帮助吗?

我无法解决这个问题,真的需要一些专家的帮助,谢谢。

像这样改变你的看法:

CREATE VIEW USD_ITEMS AS
  SELECT 
    IP.NAME AS NAME,
    (Item_Price.PRICE * FX_Rate.FX) AS USD_price
    ...
    FROM 
      Item_Price IP
      JOIN FX_Rate FX ON( 
        IF(IP.CURRENCY = 'USD_OLD' , 'USD', IP.CURRENCY)  = FX.CURRENCY
      )

您需要始终加入 USD 行,然后仅在必要时使用它。例如:

create view usd_items as
select
  ip.name,
  ip.price * case when ip.currency <> 'USD_OLD' then fx.fx else u.fx end
  as usd_price
from item_price ip
join fx_rate fx on ip.currency = fx.currency
cross join (
  select * from fx_rate where currency = 'USD'
) u