使用不同的键值连接两个表

时间:2014-05-28 13:49:39

标签: sql key inner-join openquery

我有两张桌子:

表1

Name | AMOUNT  | TYPE

John | 20      |  TH 

Jill | 10      |  IU

Bill | 30      |  IK

John | 45      |  AL

表2

TYPE | DESC

88   | RENT

34   | ALIMONY

87   | TAX

56   | BEER

我必须加入这些表格。我知道表1中的TYPE 'TH'对应于表2中的“88”。 同样,IK对应于87,依此类推。但是没有任何参考表可以用来加入这些参考表。有没有解决方法呢?

4 个答案:

答案 0 :(得分:0)

如果这些是表格中包含的唯一数据,您可以创建一个新表格table3

   TYPE 1| TYPE2

    88   | TH 

    34   | IU

    87   | IK

    56   | AL

尝试:

select Name,Amount,Type.table1,Type,table2 from  table1 inner join table3
on table1.Type=table3.Type2
inner join
table2 on table2.type=tabl3.type1

答案 1 :(得分:0)

您没有提及DBMS,但您应该能够使用派生表,如:

select ...
from t1
join ( values ('TH',88),('IK',87) ) as a (x,y)
    on t1.type = a.x
join t2
    on a.y = t2.type

您可能需要执行以下操作:

join ( select ('TH',88) union all select ('IK',87) ) as a (x,y)

代替。但是,如果这种关系存在,为什么不为它创建一个表并插入信息呢?

答案 2 :(得分:0)

好的,这是一个相当奇怪的问题,因为它违反了关系数据库的规则。但你可以像这样解决它:

inner join Table2 on Table2.Type = 88 and Table1.Type = 'TH'

这可以为每个组合做。但我建议最好添加一个新列,并引用该类型的id。

答案 3 :(得分:0)

如果有一个很好的理由不创建第三个表,你可以这样写:

  SELECT
    ........
  FROM
    table1 a
  JOIN table2 b
  ON
    (
      CASE
        WHEN a.type='TH'
        THEN 88
        WHEN a.type='IK'
        THEN 87
      ...........
      END
    )
    =b.type