0

我有一个带有货币名称的表,然后是货币 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

ETC

表二,看起来

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
4

3 回答 3

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;
于 2013-08-30T13:58:29.370 回答
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

小提琴:http ://sqlfiddle.com/#!3/26e09e/2

于 2013-08-30T11:25:11.613 回答
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
于 2013-08-30T11:26:29.173 回答