Pregunta

Estoy tratando de unirse a algunos datos en conjunto de 2 mesas, pero en varias columnas. he aquí un ejemplo:

  

Fuente tabla

     

ID | la descripción | AAAA | BBBB |

     

Tabla 2 tabla

     

ID | texto | ID1 | ID2 | ID3 |

donde ID1, ID2 e ID3 en Table2 son las identificaciones de la Fuente tabla

Me gustaría hacer una consulta que produce los resultados:

Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)

Me imagino que esto sería una combinación, pero no puedo obtener el derecho de sintaxis ... o iba a ser mejor con una Unión?

¿Fue útil?

Solución

Si no todas las tablas de origen se rellenan en la Tabla 2, esto todavía le dará resultados parciales:

SELECT
    t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
    FROM Table2                t
        LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID
        LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID
        LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID
    WHERE t.ID=@YourIDHere

Otros consejos

Se podía utilizar varias combinaciones, no? Por ejemplo:

SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
FROM Table2 tb
    INNER JOIN Source s1 ON tb.ID1 = s1.ID
    INNER JOIN Source s2 ON tb.ID2 = s2.ID
    INNER JOIN Source s3 ON tb.ID3 = s2.ID

Es necesario para unirse a la tabla de origen tres veces, una para cada ID. También podría intentar un unuion para ver cuál funciona mejor.

Este es un mal diseño de mesa (que debe ser normalizado) y sugeriría que la cambie ahora si es posible. Hay shoudl bea tabla relacionada con cada id en un registro separado, entonces usted podría unirse a una vez y sería mucho más eficiente y mucho más fácil de escribir código en contra y que no tendría que cambiar la estructura de la tabla y allthe consulta el día que necesita ID4.

Tres une debe hacer el truco:

select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text
from Source A
inner join Table2 B1 on B1.ID1=A.ID
inner join Table2 B2 on B2.ID2=A.ID
inner join Table2 B3 on B3.ID3=A.ID
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top