【问题标题】:Joining two tables with different key values连接具有不同键值的两个表
【发布时间】:2014-07-17 18:56:25
【问题描述】:

我有两张桌子:

表 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 等等。但是没有任何参考表可以说明我可以用来加入这些。有什么解决方法吗?

【问题讨论】:

  • 创建一个包含第 88 行、第 87 行等的表(如果还没有的话),并使用两个连接。

标签: sql key inner-join openquery


【解决方案1】:

如果存在不创建第三个表的充分理由,您可以编写如下内容:

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

【讨论】:

    【解决方案2】:

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

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

    您可以为每个组合执行此操作。但我建议最好添加一个引用类型 id 的新列。

    【讨论】:

      【解决方案3】:

      您没有提到 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)
      

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

      【讨论】:

        【解决方案4】:

        如果这些是表中包含的唯一数据,您可以创建一个新表,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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-23
          • 1970-01-01
          • 1970-01-01
          • 2015-02-13
          • 2020-11-26
          • 1970-01-01
          • 2022-01-13
          • 2011-04-07
          相关资源
          最近更新 更多