在多个列上进行连接

49

我有两个表(Table A和Table B),我想在它们的多个列上进行连接。

Table A                         
Col1     Col2                
================            
A11      A21                 
A22      A22              
A33      A23                 

Table B 
Col1     Col2   Val 
=================  
B11     B21     1  
B12     B22     2  
B13     B23     3  

我希望Table A中的两个列可以通过Table B中的Col1和Col2之一进行连接,并获取Val值。


7
您发布的示例数据将不会返回任何结果。这些A值是否实际上是以A为前缀,B值是否是以B为前缀?另外,如果列可以互换,那么此要求非常有问题,这表明设计未规范化。 - Martin Smith
我存储数据的方式可能看起来没有结果。请忽略表格中的数据如何构造。 - ElegantFellow
4个回答

64

在你的例子中没有找到匹配项。
如果你的意思是两列中的任何一个,则需要像这样查询,或者需要重新检查数据设计。

    Select TableA.Col1, TableA.Col2, TableB.Val
    FROM TableA
    INNER JOIN TableB
          ON TableA.Col1 = TableB.Col1 OR TableA.Col2 = TableB.Col2 
          OR TableA.Col2 = TableB.Col1 OR TableA.Col1 = TableB.Col2

我同意我的数据构造方式可能与实际情况不符。我仅将其编造以用于举例说明。请忽略这些数据。<br>基本上,我试图在没有映射表的情况下实现多对多关系。 - ElegantFellow

27

其他查询都是基于任何一个条件进行匹配返回记录...如果你想确保表A的两列都匹配,你需要做一些像...

select 
      tA.Col1,
      tA.Col2,
      tB.Val
   from
      TableA tA
         join TableB tB
            on  ( tA.Col1 = tB.Col1 OR tA.Col1 = tB.Col2 )
            AND ( tA.Col2 = tB.Col1 OR tA.Col2 = tB.Col2 )

3
以下是你可能会编写的SQL结构。你可以使用“AND”或“OR”进行多个连接。
Select TableA.Col1, TableA.Col2, TableB.Val
FROM TableA, 
INNER JOIN TableB
 ON TableA.Col1 = TableB.Col1 OR TableA.Col2 = TableB.Col2

0
tableB.col1 = tableA.col1 
OR tableB.col2 = tableA.col1  
OR tableB.col1 = tableA.col2  
OR tableB.col1 = tableA.col2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接