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

Como realizar consultas anidadas entre 3 tablas en una base de datos

Estas en el tema de Como realizar consultas anidadas entre 3 tablas en una base de datos en el foro de Mysql en Foros del Web. Hola amigos, tengo una consulta fijense que tengo una BD que podria describirse asi: Bueno las relaciones son de la tabla producto su llave es ...
  #1 (permalink)  
Antiguo 29/09/2012, 14:27
 
Fecha de Ingreso: septiembre-2012
Mensajes: 2
Antigüedad: 12 años, 2 meses
Puntos: 0
Como realizar consultas anidadas entre 3 tablas en una base de datos

Hola amigos, tengo una consulta fijense que tengo una BD que podria describirse asi:


  • Bueno las relaciones son de la tabla
  • producto su llave es codigo y se relaciona con ventaDetalle y codproducto
  • ventaDetalle su llave es correlativ y se relacion con ventas.correlativo
  • Ventas su llave es idVentas y se relaciona con codCliente a la tabla clientes

Quiero hacer una consulta talque me genere para cada cliente que haya realizado una compra los nombres de los productos que mas compro.

La DB funciona asi, un cliente hace una compra (Necesito mostrar el nombre del cliente), se guarda el registro en ventas y el detalle de la venta en detalleVenta, en esa tabla se ponen los codigos de los productos y en la tabla productos esta el campo nombre (Necesito mostrar unicamente el producto que mas compro).

He hecho lo siguiente con esta consulta alcanzo y me muestra los productos mas comprados
Código MySQL:
Ver original
  1. SELECT codProduc, count(codProduc) AS total
  2. FROM ventaDetalle
  3. GROUP BY codProduc
  4. ORDER BY total desc;

Tambien he hecho la siguiente consulta y me muestra los clientes que han comprado
Código MySQL:
Ver original
  1. SELECT c.nombre, e.codProduc FROM tienda.cliente as c, tienda.ventaDetalle as e
  2. WHERE c.codigo IN (select d.codcliente from tienda.ventas as d where d.codcliente =c.codigo)
  3. AND e.codProduc IN (select max(e.codProduc) from tienda.ventaDetalle as e, tienda.ventas as d
  4. where e.correlativo = d.correlativo GROUP BY e.codProduc)
  5. Group by c.nombre;

Y entonces no se como hacer la consulta que solo me muestre los clientes que han comprado y los productos que mas compraron, un saludo y de antemano muchas gracias.
  #2 (permalink)  
Antiguo 29/09/2012, 16:34
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Como realizar consultas anidadas entre 3 tablas en una base de datos

Hay un error de diseño en tu diagrama de tablas: El detalle de venta depende de la venta y no al revés. Es decir que la PK de Venta debe ir como FK en el DetalleVenta.
Corrige eso.

Fuera de eso, estás haciendo consultas innecesariamente complicadas y no estás realizando los JOINs correctamente.
Yo propondría:
Código MySQL:
Ver original
  1.     NombreCliente,
  2.     NombreProducto
  3.     (SELECT
  4.         c.nombre NombreCliente,
  5.         p.nombre NombreProducto,
  6.         MAX(d.cantidad)
  7.     FROM
  8.         cliente c INNER JOIN ventas v ON c.codigo = v.codcliente
  9.         INNER JOIN ventadetalle d ON v.idventas = d.idventas
  10.         INNER JOIN producto d.idproducto = p.idproducto
  11.     GROUP BY c.codigo) T1;
Siempre basado en que corrijas ese error de diseño...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/09/2012, 17:11
 
Fecha de Ingreso: septiembre-2012
Mensajes: 2
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Como realizar consultas anidadas entre 3 tablas en una base de datos

Muchas gracias ya me funciono =) un saludo!

Última edición por lakai; 29/09/2012 a las 17:36

Etiquetas: anidadas, select, tabla, tablas, campos
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:57.