2011-08-24 37 views
30

Tengo dos tablas (Tabla A y Tabla B) que deseo unir en varias columnas en ambas tablas.join en varias columnas

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

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

Quiero las dos columnas de la Tabla A para unirse en cualquiera de Col1 y Col2 en la Tabla B para conseguir Val.

+4

Los datos de ejemplo que ha publicado no mostrarán resultados. ¿Están los valores 'A 'realmente prefijados' A' y 'B'''' B'? También este es un requisito muy mal olor si las columnas son intercambiables de esta manera indica que el diseño no está normalizado. –

+0

La forma en que pongo mis datos parece que no hay resultados. Por favor, ignore cómo se construyen los datos en la tabla. – ElegantFellow

Respuesta

39

De acuerdo coincidencias en tu ejemplo.
Si se refiere a ambas columnas, entonces necesita una consulta como esta o necesita volver a examinar el diseño de datos.

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 
+0

Acepto que no habrá coincidencia con la forma en que se construyen mis datos. Invente los datos sobre la marcha para una ilustración. Por favor ignora los datos.
Básicamente, estoy tratando de lograr una relación muchos a muchos sin una tabla de asignación. – ElegantFellow

1

A continuación se muestra la estructura de SQL que puede escribir. Puede hacer varias uniones usando "Y" o "O".

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 
14

Las otras consultas todos vamos de base en cualquier una de las condiciones de clasificación y ha de devolver un registro ... si usted quiere asegurarse de que las columnas de la tabla A ambos coinciden, tendrá que hacer algo como ...

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)