MySQL:加入货币代码

MySQL:加入货币代码,mysql,join,left-join,currency,Mysql,Join,Left Join,Currency,我仍然是MySQL的新手,但我正在尝试将最新的外汇汇率加入到货币列表中,其中货币代码是主键 当尝试对货币代码进行联接时,联接返回null,但当联接到包含相同货币代码的其他表时,联接不返回null。下面是一个简化的例子 外汇汇率表 date, close_price, currency 2017-06-21, 1.6772, AUD 2017-06-21, 1.6881, CAD 2017-06-21, 1.2329, CHF 2017-06-21

我仍然是MySQL的新手,但我正在尝试将最新的外汇汇率加入到货币列表中,其中货币代码是主键

当尝试对货币代码进行联接时,联接返回null,但当联接到包含相同货币代码的其他表时,联接不返回null。下面是一个简化的例子

外汇汇率表

date,        close_price, currency
2017-06-21,  1.6772,      AUD
2017-06-21,  1.6881,      CAD
2017-06-21,  1.2329,      CHF
2017-06-21,  1.1356,      EUR
货币表

currency, cur_name
AUD,      AUSTRALIAN DOLLAR
CAD,      CANADIAN DOLLAR
CHF,      SWISS FRANC
EUR,      EURO
Currency是Currency表的主键,也是fx_rates表中的外键。但是,当我尝试运行以下查询时:

**

**

我明白了

cur_name,          currency, close_price
AUSTRALIAN DOLLAR, AUD ,     NULL
CANADIAN DOLLAR,   CAD ,     NULL
SWISS FRANC,       CHF ,     NULL
EURO ,             EUR ,     NULL
如果你能解决这个问题,非常感谢

模式

——-----------------------------------------------------
--表'atl`.`货币`
-- -----------------------------------------------------
创建表(如果不存在)`atl`.`Currency`(
`货币'VARCHAR(45)不为空,
`cur_name`VARCHAR(45)不为空,
`bbg_ticker`VARCHAR(45)NULL,
`配对名称`文本(100)空,
`long_pair_name`TEXT(100)NULL,
主键(`currency`)
引擎=InnoDB;
-- -----------------------------------------------------
--表'atl`.'FX\U汇率`
-- -----------------------------------------------------
如果不存在表“atl”。“外汇汇率”(
`日期`日期不为空,
`close_price`VARCHAR(45)不为空,
`货币'varchar(45)不为空,
索引'currency_idx'('currency'ASC),
限制`货币`
外键(`currency`)
引用'atl`.'Currency`('Currency`)
不删除任何操作
更新时(无操作)

引擎=InnoDB看起来您的查询中一切正常。问题可能出现在空格中,例如,其中一个表中的
AUD
可以是'AUD',然后是'AUD'!='AUD',是否对此列使用枚举数据类型?也许您可以提供更多与信息相关的架构结构?这就是为什么最好使用自动递增整数而不是varchar作为主键的原因。@alexeypalamar Hi,感谢您的关注。不,我不使用枚举。这能解决问题吗?请不要使用此架构,这是非常糟糕的性能配置。货币列应至少为枚举类型,或者您可以使用整数主键而不是
AUD
CAD
,e.t.c@谢谢你,阿列克谢。我会仔细阅读并做出改变。
cur_name,          currency, close_price
AUSTRALIAN DOLLAR, AUD ,     NULL
CANADIAN DOLLAR,   CAD ,     NULL
SWISS FRANC,       CHF ,     NULL
EURO ,             EUR ,     NULL