SQL Server - Error en Left join

 
Vista:
sin imagen de perfil

Error en Left join

Publicado por Enrique (7 intervenciones) el 19/05/2008 10:03:30
Buenas,

Tengo un problema con sql server 2000 y creo que es problema de índices pero no estoy seguro y quisiera ayuda.

Tengo un par de tablas master-detail, relacionadas con un foreign key de dos campos, el el master es el primary key, en el detalle, es un indice.
El detalle tiene un primary key por otros campos.

Si quiero ver las líneas que hay en un intervalo de fecha, en donde el campo fecha esta en la cabecera el left join me está trayendo la misma línea repetida varias veces y en donde me devería devolver 50 lineas me está devolviendo 500 y pico ,, es ilógico, ya quelas líneas tienen un primary key que funciona correctamente, pero aquí, lo hace mal.

En cambio si pido las líneas de una cabecera, con un simple select por los campos de la relación me trae los correctos sin duplicados.

Por qué lo hace mal??, existe alguna herramienta de reorganización de indices. He probado con un plan de mantenimineto y tampoco ha funcionado.

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

RE:Error en Left join

Publicado por Isaias (3308 intervenciones) el 19/05/2008 20:19:54
¿Y si nos muestra su instruccion de SQL que esta ejecutando?
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
sin imagen de perfil

RE:Error en Left join

Publicado por enrique (7 intervenciones) el 20/05/2008 00:13:23
Select lticket.idlticket,lticket.idtienda from ticket
left join lticket on ticket.idtienda = lticket.idtienda AND ticket.idticket = lticket.idticket
where ticket.idtienda = 47 AND fecha >= '20080503' AND fecha < '20080504'

Salvo error, más o menos este es el select, no tiene secretos. En teoria existen 51 lineas de lticket que cumple la condición y esta devolviendo 510, porque cada linea la esta repitiendo 10 veces.

Si tomo al azar cualquier identificador de los que aparecen y hago el siguiente select:

Select lticket.idlticket,lticket.idtienda from lticket
where lticket.idtienda = 47 AND lticket.idticket = 2338
y me saca exactamente las dos lineas que tiene el ticket. de hecho hay un PK que prohibe que se repitan las lineas.

No entiendo el problema.

gracias
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:Error en Left join

Publicado por Daniel (10 intervenciones) el 20/05/2008 03:43:56
Bien...viendo tu codigo estoy seguro que con DISTINCT se resuelve tu problema..
la consulta quedaria asi:

Select l distinct ticket.idlticket,lticket.idtienda from ticket
left join lticket on ticket.idtienda = lticket.idtienda AND ticket.idticket = lticket.idticket

y es todo... asi de sencillo

te recomiendo que uses alias combinados con Join para que hagas mas clara y legible tu consulta..kedaria asi:

SELECT DISTINCT T.idlticket, LT.idtienda
FROM Tiket T LEFT JOIN LTiket LT ON T.idtienda = LT.idtienda AND T.idticket = TL.idticket

Donde T es el alias de ticket y LT es alias de ltickete y remplazas los alias por su respectivas tablas...
pero bueno es solo una recomendacion...

Espero te halla ayudado en tu problema.. si es asi me gustaria saberlo.. hasta luego
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:Error en Left join

Publicado por Daniel (10 intervenciones) el 20/05/2008 03:27:15
pienso que tu problema es normal, si es lo que yo me imagino. Es cuestion del producto cartesiano que sucede en la relacion de las tablas... prueba poner la palabra DISTINCT inmediatamentye despues del SELECT y antes de las listas de las columnas de tu consulta.
Esto lo que hace es eliminar aquellos datos repetidos en la consulta.. siempre y cuando sean igualesen toods sus campos.
Bien amigo, espero que eso resuelva tu problema.
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