我有一个带货币名称的表,然后是货币sk。 我有第二个表有currency_sk_from,currency_sk_to和conversion_rate。
我想得到一个结合了这个的新表,所以我得到currency_sk_from,currency_name,currency_sk_to,currency_name_to,conversion_rate
有人可以帮忙,当我试图加入它时,第二张桌子的尺寸增加了一倍。
表一,看起来像
currency name Currency SK
EUR , 1
USD , 2
SEK , 3
等
表二,看起来像
currency_sk_from currency_sk_to conversion_rate
1 , 2 , 1.5
2 , 1 , .6666
3 , 1 , 41
我想要的是
currency_sk_from currency_name currency_sk_to currency_name_to conversion_rate
1 , EUR , 2 , USD , 1.5
2 , USD , 1 , EUR , .6666
3 , SEK , 1 , EUR , 41
答案 0 :(得分:2)
您可以尝试使用子查询而不是连接: -
SELECT CURRENCY_SK_FROM,
(SELECT CURRENCY_NAME
FROM CURRENCY
WHERE CURRENCY_SK = CURRENCY_SK_FROM) AS CURRENCY_NAME,
CURRENCY_SK_TO,
(SELECT CURRENCY_NAME
FROM CURRENCY
WHERE CURRENCY_SK = CURRENCY_SK_TO) AS CURRENCY_NAME_TO,
CONVERSION_RATE
FROM CONVERSION_RATE_TABLE;
答案 1 :(得分:0)
如果我已正确理解了这个问题,那么查询就可以完成这项工作:
SELECT DISTINCT
cskf.currency_sk_from,
cskfrom.currency_name,
cskf.currency_sk_to,
cskto.currency_name currency_name_to,
cskf.conversion_rate
FROM
currency_sk cskfrom
JOIN
currency_sk_from cskf ON
cskfrom.currency_sk = cskf.currency_sk_from
JOIN
currency_sk cskto ON
cskto.currency_sk = cskf.currency_sk_to
答案 2 :(得分:0)
要以select
执行此操作,您需要两个联接来获取这两种货币:
select t2.currency_sk_from, fromname.currency as from_name,
t2.currency_sk_to, toname.currency as to_name, t2.conversion_rate
from table2 t2 join
table1 fromname
on t2.currency_sk_from = fromname.sk join
table1 toname
on t2.currency_sk_to = toname.sk;
我实际上并不认为你需要一张新桌子。这很容易设置为获取货币名称的视图。
编辑:
您应该通过以下方式检查table1
中的重复项:
select sk, count(*)
from table1
group by sk
having count(*) > 1