consulta SQL para unirse a varias columnas
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?
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