两张SK在一张桌子上

时间:2013-08-30 11:09:50

标签: sql join

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

3 个答案:

答案 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

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

答案 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