объединить в несколько столбцов - PullRequest
40 голосов
/ 25 августа 2011

У меня есть две таблицы (Таблица 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 соединились на одном из столбцов Col1 и Col2 в таблице B, чтобы получить значение Val.

Ответы [ 4 ]

50 голосов
/ 25 августа 2011

Согласитесь, что нет совпадений в вашем примере.
Если вы имеете в виду оба столбца в одном из них, то вам нужен запрос, подобный этому, или вам нужно пересмотреть структуру данных.

    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
22 голосов
/ 25 августа 2011

Все остальные запросы основаны на ОДНОМ из соответствующих условий, и он вернет запись ... если вы хотите убедиться, что ОБА столбцы таблицы А совпадают, вам придется сделать что-то подобное...

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 )
2 голосов
/ 25 августа 2011

Ниже приведена структура SQL, которую вы можете написать. Вы можете сделать несколько соединений, используя «И» или «ИЛИ».

Select TableA.Col1, TableA.Col2, TableB.Val
FROM TableA, 
INNER JOIN TableB
 ON TableA.Col1 = TableB.Col1 OR TableA.Col2 = TableB.Col2
0 голосов
/ 25 августа 2011
tableB.col1 = tableA.col1 
OR tableB.col2 = tableA.col1  
OR tableB.col1 = tableA.col2  
OR tableB.col1 = tableA.col2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...