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.