Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

JOIN con 2 tablas

Estas en el tema de JOIN con 2 tablas en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 18/05/2011, 12:57
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años
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
  #2 (permalink)  
Antiguo 18/05/2011, 14:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: JOIN con 2 tablas

No te funciona algo asi??


SELECT *
FROM
tabla1 t1
inner join tabla2 t2 on (t1.id=t2.id)
LEFT JOIN tabla3 t3 on (te.id=t2.id)
WHERE
tabla1.id=tabla2.id
AND tabla1.ir=tabla2.ir
and tabla1.x=tabla3.x


SAludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 18/05/2011, 15:32
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años
Puntos: 336
Respuesta: JOIN con 2 tablas

no, me aparece redundancia, o sea, aparecen datos que no corresponden

la tabla3 tiene 2 PKs, una es dependiente de la tabla1 y otra de la tabla2, por lo tanto no me sirve en JOINs independientes, usando tu código, te marco donde falta la relación.

SELECT *
FROM
tabla1 t1
inner join tabla2 t2 on (t1.id=t2.id)
LEFT JOIN tabla3 t3 on (t3.id=t2.id AND t3.x=t1.x)
WHERE
tabla1.id=tabla2.id
AND tabla1.ir=tabla2.ir
and tabla1.x=tabla3.x

que bueno que se haya entendido, y gracias por estarme ayudando, alguna otra idea?
__________________
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

Etiquetas: join, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:33.