SQL - Ayuda con INNER JOIN 3 tablas

   
Vista:

Ayuda con INNER JOIN 3 tablas

Publicado por Modesto Hernández (1 intervención) el 06/09/2011 19:34:29
Hola a tod@s!!

Mi problema es el siguiente. Tengo tres tablas, clientes_datos donde se guardan los datos personales de los clientes, gestion_ventas_cabecera donde se guardan los datos de la cabecera de una venta y gestion_ventas_lineas donde se guarda cada artículo vendido con su precio y que hacen referencia a una venta, Es decir, en gestión_ventas_cabecera aparecerá algo como, fecha de la venta, nº de ticket y codigo_cliente del comprador y en la tabla gestion_ventas_lineas aparecerán tantas tuplas como articulos vendidos tenga esa venta, Por ejemplo, ticket nº 234 tendrá n apariciones con gestion_ventas_lineas: 234 pantalon 60€ , 234 camisa 25€ y así.

Lo que necesito sacar son los datos de los clientes (clientes_datos) que han realizado compras en una determinada fecha. La relación entre las tablas es la siguiente:

clientes_datos :
-> codigo_cliente

gestion_ventas_cabecera :
-> numero_cliente Referencia a codigo_cliente (clientes_datos)
-> numero_ticket
-> tienda

gestion_ventas_lineas:
-> numero_ticket Referencia a numero_ticket (gestion_ventas_cabecera)
-> tienda Referencia a tienda (gestion_ventas_cabecera)

Mi select inicial es esta:

SELECT cd.codigo_cliente, cd.apellidos_cliente, cd.nombre_cliente, gvc1.fecha
FROM clientes_datos cd, gestion_ventas_cabecera gvc1
WHERE cd.codigo_cliente IN (
SELECT gvc.numero_cliente
FROM gestion_ventas_cabecera gvc
INNER JOIN gestion_ventas_lineas gvl
ON (gvc.numero_ticket = gvl.numero_ticket)
AND (gvc.tienda = gvl.tienda)
WHERE (gvc.fecha BETWEEN '2010-01-01' AND '2010-01-31')
)
GROUP BY cd.codigo_cliente
ORDER BY cd.apellidos_cliente

Pero esta select es muy pesada y tarda más de 2min en ejecutarse, algo estoy haciendo mal. Sólo me pasa cuando intento que la Select me recupere el dato fecha de la tabla gestion_ventas_cabecera que es la fecha de la compra. Si no quisiera devolver ese campo la select tarda apenas 4 o 5 segs en devolver el resultado. No sé qué hago mal.

He intentado hacerlo a lo bruto usando tres inner_join seguidos, pero igualmente tarda una eternidad con la siguiente select usando el asistente:

SELECT
clientes_datos.codigo_cliente,
clientes_datos.apellidos_cliente,
clientes_datos.nombre_cliente,
gestion_ventas_cabecera.fecha
FROM
clientes_datos
INNER JOIN gestion_ventas_cabecera ON (clientes_datos.codigo_cliente = gestion_ventas_cabecera.numero_cliente)
INNER JOIN gestion_ventas_lineas ON (gestion_ventas_cabecera.numero_ticket = gestion_ventas_lineas.numero_ticket)
AND (gestion_ventas_cabecera.optica = gestion_ventas_lineas.optica)
WHERE
gestion_ventas_cabecera.fecha BETWEEN '2010-01-01' AND '2010-01-31'



Muchas 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

Ayuda con INNER JOIN 3 tablas

Publicado por Jonathan jcontasti@yahoo.com (1 intervención) el 09/11/2011 14:40:48
Buenos días Sr. r: Modesto Hernández reciba mi mas cordial saludo le presente es para saber si logro solucionar el problema que tenia con el código y la tardanza en procesar la información, mi duda es la siguiente al igual que usted necesito hacer una consulta a 3 tablas de una factura las cuales están relacionadas de la siguiente forma:

Cliente ------------> Factura -------------->Detalle_Factura
*cod_cliente *NroCliente *idDetalle
**cod_provee ** NroFactura

lo que necesito es crear una consulta sql donde pueda consultar los registros de una factura que halla realizado un cliente determinado y pasar dichos datos a un reporte (datareport), si me puede ayudar se lo agradecería y de ante mano Muchas Gracias por su ayuda.
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