Ver Mensaje Individual
  #1 (permalink)  
Antiguo 18/05/2011, 12:57
Avatar de stramin
stramin
 
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
JOIN con 2 tablas

Buenas, tengo un problema con una consulta SQL que ya me ha tomado 5 horas y no encuentro solución!

la consulta tiene unas 15 tablas relacionadas por muchas PK, así que para explicar el problema solo pondré 3 tablas

La consulta usa LEFT JOIN para agregar un dato que puede no existir (por eso uso JOIN)

Antiguamente la consulta funcionaba así:

SELECT *
FROM
tabla1
tabla2
LEFT JOIN tabla3
ON tabla2.id=tabla3.id
AND tabla2.ir=tabla3.ir
WHERE
tabla1.id=tabla2.id
AND tabla1.ir=tabla2.ir

el problema es que ahora hay que relacionar tambien con un campo de la tabla1, o sea:

SELECT *
FROM
tabla1
tabla2
LEFT JOIN tabla3
ON tabla2.id=tabla3.id
AND tabla2.ir=tabla3.ir
AND tabla1.x=tabla3.x
WHERE
tabla1.id=tabla2.id
AND tabla1.ir=tabla2.ir

Me han sugerido guardar toda la consulta en una tabla temporal por lo que he conseguido algo así:

BEGIN
SELECT *
FROM
tabla1
tabla2
INTO #tablita
WHERE
tabla1.id=tabla2.id
AND tabla1.ir=tabla2.ir
/**/
SELECT *
FROM #tablita AS tabl
LEFT JOIN tabla3
ON tabl.id=tabla3.id
AND tabl.ir=tabla3.ir
AND tabl.x=tabla3.x
END

Lo que me funciona, el problema es... que la consulta tarda 15 minutos en realizarse, debido a que demora mucho en sacar y comparar los datos de la tabla temporal

también había considerado la opción de meter el dato x en una variable así

DECLARE @xx VARCHAR(10)
SELECT *,
tabla1.x AS @xx
FROM
tabla1
tabla2
LEFT JOIN tabla3
ON tabla2.id=tabla3.id
AND tabla2.ir=tabla3.ir
AND @xx=tabla3.x
WHERE
tabla1.id=tabla2.id
AND tabla1.ir=tabla2.ir

pero no me resulta, espero me puedan dar alguna idea, gracias.
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D