我有2个表:一个表具有汇率(对GBP),另一个表具有不同货币的不同金额列。我正在加入这两个表,并以GBP显示所有金额值,但是许多都为空。
> select * from xrates;
+--------------+--------------+--+
| xrates.curr | xrates.rate |
+--------------+--------------+--+
| GBP | 1 |
| INR | 89.74 |
| EUR | 1.23 |
+--------------+--------------+--+
> select * from balances;
+-----------------------+-----------------+--------------------+-----------------+---------------------+-----------------+--+
| balances.acctbalance | balances.acurr | balances.interest | balances.icurr | balances.dividends | balances.dcurr |
+-----------------------+-----------------+--------------------+-----------------+---------------------+-----------------+--+
| 334.23 | GBP | 1.2 | GBP | 0 | GBP |
| 10000 | INR | 100 | EUR | NULL | GBP |
+-----------------------+-----------------+--------------------+-----------------+---------------------+-----------------+--+
这是连接这两个表的查询
SELECT
acctbalance, acurr, acctbalance/rate as `AB to GBP`,
interest, icurr, interest/rate as `Ints to GBP`,
dividends, dcurr, dividends/rate as `Divnd to GBP`
FROM
balances --table 1
LEFT JOIN
xrates --table 2
on acurr = curr --account balance currency
and icurr = curr --interest currency
and dcurr = curr --dividend currency
+--------------+--------+------------+-----------+--------+--------------+------------+--------+---------------+--+
| acctbalance | acurr | ab to gbp | interest | icurr | ints to gbp | dividends | dcurr | divnd to gbp |
+--------------+--------+------------+-----------+--------+--------------+------------+--------+---------------+--+
| 334.23 | GBP | 334.23 | 1.2 | GBP | 1.2 | 0 | GBP | 0 |
| 10000 | INR | NULL | 100 | EUR | NULL | NULL | GBP | NULL |
+--------------+--------+------------+-----------+--------+--------------+------------+--------+---------------+--+
(2nd row - converted to GBP columns - has nulls)
答案 0 :(得分:2)
您再次需要两个JOIN
:
SELECT b.acctbalance, b.acurr, b.acctbalance / r1.rate as `AB to GBP`,
b.interest, b.icurr, b.interest / r2.rate as `Ints to GBP`,
b.dividends, b.dcurr, b.dividends / r3.rate as `Divnd to GBP`
FROM balances b LEFT JOIN
xrates r1
ON b.acurr = r1.curr LEFT JOIN
xrates r2
ON b.icurr = r2.curr LEFT JOIN
xrates r3
ON b.dcurr = r3.curr;
答案 1 :(得分:1)
由于三种不同金额的货币都可以变化,因此您不能一次加入汇率。如果货币相同,则只会找到汇率记录。因此,您得到NULL
,其中的货币有所不同,因为未找到汇率。尝试分别加入3次。
SELECT b.acctbalance,
b.acurr,
b.acctbalance / xa.rate `AB to GBP`,
b.interest,
b.icurr,
b.interest / xi.rate `Ints to GBP`,
b.dividends,
b.dcurr,
b.dividends / xd.rate `Divnd to GBP`
FROM balances b
LEFT JOIN xrates xa
ON xa.curr = b.acurr
LEFT JOIN xrates xi
ON xi.curr = b.icurr
LEFT JOIN xrates xd
ON xd.curr = b.dcurr;