SQL - cruce tablas

 
Vista:

cruce tablas

Publicado por oscar (39 intervenciones) el 26/03/2010 18:32:46
buen dia
un favor
tengo 3 tablas y necesito relacionarlas de tal forma que me traigan los no coincidentes y concidentes entre las tres:
Ej:
Tabla 1
Codigo
1
2
3
4
Tabla 2
Codigo
1
5
Tabla 3
2
6
Resultado
Tabla1-Tabla2-Tabla3
1-1-1
2-null-2
3-null-null
4-null-null
null-5-null
null-null-6

El resultado lo estoy tratando de obtener con un FULL OUTER JOIN pero los tiempos de respuesta no son los mejores ya que son muchos registros, alguien me puede dar a una idea?.
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:cruce tablas

Publicado por Leonardo Josue (1173 intervenciones) el 26/03/2010 21:13:30
Buenas Tardes Oscar... según yo en tu tabla de salida hay un pequeño error ya que en la tabla 3 no existe un registro con Codigo 1, por lo tanto la tabla de salida debería ser

Tabla1-Tabla2-Tabla3
1-1-null
2-null-2
3-null-null
4-null-null
null-5-null
null-null-6

Ahora bien, la utilización del FULL OUTER JOIN es la correcta y optima, por lo que difícilmente creo que puedas mejorar tus tiempos de respuesta, de cualquier manera te envío el equivalente utilizando sólo LEFT y RIGHT JOIN y UNION para que hagas la prueba y veas si mejora un poco tu rendimiento.

SELECT A.*, Tabla3.Codigo as Codigo3 FROM
(
SELECT Tabla1.Codigo as Codigo1, Tabla2.Codigo as Codigo2
FROM Tabla1 LEFT JOIN Tabla2 on Tabla2.Codigo = Tabla1.Codigo
UNION
SELECT Tabla1.Codigo as Codigo1, Tabla2.Codigo as Codigo2
FROM Tabla1 RIGHT JOIN Tabla2 on Tabla2.Codigo = Tabla1.Codigo
) A
LEFT JOIN Tabla3 On Tabla3.Codigo = A.Codigo1
UNION
SELECT A.*, Tabla3.Codigo as Codigo3 FROM
(
SELECT Tabla1.Codigo as Codigo1, Tabla2.Codigo as Codigo2
FROM Tabla1 LEFT JOIN Tabla2 on Tabla2.Codigo = Tabla1.Codigo
UNION
SELECT Tabla1.Codigo as Codigo1, Tabla2.Codigo as Codigo2
FROM Tabla1 RIGHT JOIN Tabla2 on Tabla2.Codigo = Tabla1.Codigo
) A
RIGHT JOIN Tabla3 On Tabla3.Codigo = A.Codigo1

Saludos
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:cruce tablas

Publicado por person (1 intervención) el 11/06/2010 17:44:32
utiliza un vector

realizar fun for por el primery principal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar