sql-在多列上联接

我有两个表(表A和表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  

我希望表A中的两个列都可以连接表B中的Col1和Col2之一以获取Val。

ElegantFellow asked 2020-08-12T01:39:59Z
4个解决方案
53 votes

同意您的示例中没有匹配项。
如果您的意思是这两列中的任何一列,则都需要这样的查询,或者需要重新检查数据设计。

    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
paparazzo answered 2020-08-12T01:40:09Z
22 votes

其他查询都是基于任何一个符合条件的查询,并且它将返回一条记录...如果您要确保表A的BOTH列都匹配,则必须执行类似的操作...

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 )
DRapp answered 2020-08-12T01:40:30Z
2 votes

下面是您可能编写的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
CharithJ answered 2020-08-12T01:40:50Z
0 votes
tableB.col1 = tableA.col1 
OR tableB.col2 = tableA.col1  
OR tableB.col1 = tableA.col2  
OR tableB.col1 = tableA.col2
gview answered 2020-08-12T01:41:05Z
translate from https://stackoverflow.com:/questions/7183364/join-on-multiple-columns