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

[SOLUCIONADO] Como puedo resolver esta consulta en MYSQL?

Estas en el tema de Como puedo resolver esta consulta en MYSQL? en el foro de Bases de Datos General en Foros del Web. Buenas tardes a todos, muchas gracias por entrar a mi tema Tengo una base de datos MYSQL sencilla de venta de artículos electrónicos y se ...
  #1 (permalink)  
Antiguo 26/07/2015, 20:48
 
Fecha de Ingreso: julio-2015
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Como puedo resolver esta consulta en MYSQL?

Buenas tardes a todos, muchas gracias por entrar a mi tema

Tengo una base de datos MYSQL sencilla de venta de artículos electrónicos y se me ha presentado una consulta que no sé como resolver

Los artículos están divididos en cinco secciones (1, 2, 3, 4, 5) y necesito obtener los datos de los clientes que han comprado todos los artículos de cualquiera de esas 5 secciones... pero no tengo idea de cómo hacerlo

Las tablas que tengo son las siguientes

Código:
CREATE TABLE Seccion (
  Codigo_Seccion INT NOT NULL,
  Nombre VARCHAR(45))

CREATE TABLE Articulo (
  Codigo_Articulo INT NOT NULL ,
  Codigo_Seccion INT NOT NULL,
  Nombre VARCHAR(45))

CREATE TABLE Pedido (
ID_Pedido INT NOT NULL,
Codigo_Articulo INT NOT NULL ,
DNI_Cliente VARCHAR(16) NOT NULL)

CREATE TABLE Cliente (
  DNI_Cliente VARCHAR(45) NOT NULL ,
 Nombre VARCHAR(45) )

Ojalà alguien me pueda ayudar

Saludos
  #2 (permalink)  
Antiguo 27/07/2015, 00:19
 
Fecha de Ingreso: marzo-2015
Mensajes: 183
Antigüedad: 9 años, 7 meses
Puntos: 8
Respuesta: Como puedo resolver esta consulta en MYSQL?

Te refieres a que por lo menos el cliente haya hecho una compra en cada sección (categoria)?

¿Oh que haya comprado todos los artículos que están en una sección?
¿Cuales son los valores de Codigo_Seccion (id)?
  #3 (permalink)  
Antiguo 27/07/2015, 12:27
 
Fecha de Ingreso: julio-2015
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Como puedo resolver esta consulta en MYSQL?

Hola, gracias por contestar!

No, el cliente tiene que comprar todos los artículos de alguna sección, por ejemplo si la sección es Jardinería y tiene dos artículos Regadera y Pala, el cliente tuvo que haber comprado al menos 1 Regadera y al menos 1 Pala.

Osea haber realizado al menos 1 compra para cada artículo de la sección.

Los valores de Codigo_Seccion son cinco (1, 2, 3, 4, 5)

Se me ocurrió que la solución podría necesitar un Artículo LEFT JOIN Pedido, y trabajar con los NULL, pero de ahí no sé como resolver el problema
  #4 (permalink)  
Antiguo 27/07/2015, 12:45
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Como puedo resolver esta consulta en MYSQL?

La tabla Pedido no tiene algo importante como las fechas y también no tienes la tabla Detalle_Pedido, ahora lo que yo puedo ver es que por cada producto se genera un pedido cosa que está mal, por cada pedido debes de tener un detalle de pedido.
Mi pregunta es; la compra pudo haber sido en cualquier Pedido, o necesariamente en el mismo pedido..??

Última edición por uagrm; 27/07/2015 a las 12:51
  #5 (permalink)  
Antiguo 27/07/2015, 13:03
 
Fecha de Ingreso: julio-2015
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Como puedo resolver esta consulta en MYSQL?

Cita:
Iniciado por uagrm Ver Mensaje
A tu table Pedido le falta algo importante como las fechas y también no tienes la tabla Detalle_Pedido, ahora lo que yo puedo ver es que por cada producto se genera un pedido cosa que está mal.
Mi pregunta es; la compra pudo haber sido en cualquier Pedido, o necesariamente en el mismo pedido..??
Este es un esquema muy simple, donde por cada pedido solo se puede comprar 1 artículo, no se requiere almacenar la fecha

La compra puede haber sido en cualquier pedido
  #6 (permalink)  
Antiguo 27/07/2015, 13:05
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como puedo resolver esta consulta en MYSQL?

La pregunta es que cliente ha comprado los 5 articulos, no importa la fecha de compra o que sea en un periodo determinado sino solo saber que cliente tiene compras en las 5 secciones

Código SQL:
Ver original
  1. CREATE TABLE #Seccion (
  2.   Codigo_Seccion INT NOT NULL,
  3.   Nombre VARCHAR(45))
  4.  
  5. INSERT INTO #seccion VALUES (1,'Seccion1')
  6. INSERT INTO #seccion VALUES (2,'Seccion1')
  7. INSERT INTO #seccion VALUES (3,'Seccion1')
  8. INSERT INTO #seccion VALUES (4,'Seccion1')
  9. INSERT INTO #seccion VALUES (5,'Seccion1')
  10. INSERT INTO #seccion VALUES (6,'Seccion1')
  11.  
  12. CREATE TABLE #Articulo (
  13.   Codigo_Articulo INT NOT NULL ,
  14.   Codigo_Seccion INT NOT NULL,
  15.   Nombre VARCHAR(45))
  16.  
  17. INSERT INTO #articulo VALUES (1,1,'Art1')
  18. INSERT INTO #articulo VALUES (2,2,'Art2')
  19. INSERT INTO #articulo VALUES (3,3,'Art3')
  20. INSERT INTO #articulo VALUES (4,4,'Art4')
  21. INSERT INTO #articulo VALUES (5,5,'Art5')
  22. INSERT INTO #articulo VALUES (6,6,'Art6')
  23.  
  24.  
  25. CREATE TABLE #Pedido (
  26. ID_Pedido INT NOT NULL,
  27. Codigo_Articulo INT NOT NULL ,
  28. DNI_Cliente VARCHAR(16) NOT NULL)
  29.  
  30. INSERT INTO #pedido VALUES (1,1,'11234')
  31. INSERT INTO #pedido VALUES (2,2,'11234')
  32. INSERT INTO #pedido VALUES (3,3,'11234')
  33. INSERT INTO #pedido VALUES (4,4,'11234')
  34. INSERT INTO #pedido VALUES (5,5,'11234')
  35. INSERT INTO #pedido VALUES (6,5,'11234')
  36. INSERT INTO #pedido VALUES (7,1,'11234')
  37.  
  38. INSERT INTO #pedido VALUES (1,1,'11235')
  39. INSERT INTO #pedido VALUES (1,2,'11235')
  40. INSERT INTO #pedido VALUES (1,3,'11235')
  41. INSERT INTO #pedido VALUES (1,3,'11235')
  42. INSERT INTO #pedido VALUES (1,3,'11235')
  43. INSERT INTO #pedido VALUES (1,4,'11235')
  44. INSERT INTO #pedido VALUES (1,5,'11235')
  45. INSERT INTO #pedido VALUES (1,6,'11235')
  46.  
  47.  
  48. CREATE TABLE #Cliente (
  49.   DNI_Cliente VARCHAR(45) NOT NULL ,
  50.  Nombre VARCHAR(45) )
  51.  
  52.  INSERT INTO #cliente VALUES ('1234','Libras')
  53.  INSERT INTO #cliente VALUES ('12345','Libras1')
  54.  
  55.  
  56. SELECT * FROM(
  57. SELECT dni_cliente, COUNT(codigo_seccion) AS total FROM(
  58. SELECT DISTINCT DNI_Cliente,Codigo_Seccion FROM #pedido AS t1
  59. LEFT JOIN #Articulo AS t2 ON (t1.Codigo_Articulo=t2.Codigo_Articulo)
  60. ) AS t3
  61. GROUP BY dni_cliente
  62. ) AS t4 WHERE total=(SELECT COUNT(*) FROM #Seccion)

El resultado de este ejercicio donde son 6 secciones es el usuario Libras1

P.D: el query esta en sql server(para que no preguntes el porque los #) y use tablas temporales #, pero el codigo del query lo pudes adaptar para mysql :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 27/07/2015, 13:18
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Como puedo resolver esta consulta en MYSQL?

Libras, entiendo que eres muy bueno en sql, pero debes saber que mucha gente recién está dando sus primeros pasos en este lenguaje, Gianchu no pudo hacer una sencilla consulta peor va entender como trabajar con tablas temporales. Gianchu como muchos otros que preguntamos necesitamos con nos ayuden no que nos compliquen más.
  #8 (permalink)  
Antiguo 27/07/2015, 13:37
 
Fecha de Ingreso: julio-2015
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Como puedo resolver esta consulta en MYSQL?

Cita:
Iniciado por Libras Ver Mensaje
La pregunta es que cliente ha comprado los 5 articulos, no importa la fecha de compra o que sea en un periodo determinado sino solo saber que cliente tiene compras en las 5 secciones
Muchas gracias por las tablas y las inserciones, pero la consulta era otra

La pregunta es qué cliente ha comprado TODOS los artículos de una sección, sea cual sea.

Por ejemplo si tengo

Código:
CREATE TABLE #Seccion (
  Codigo_Seccion INT NOT NULL,
  Nombre VARCHAR(45))
 
INSERT INTO #seccion VALUES (1,'Seccion1')
INSERT INTO #seccion VALUES (2,'Seccion1')
 
CREATE TABLE #Articulo (
  Codigo_Articulo INT NOT NULL ,
  Codigo_Seccion INT NOT NULL,
  Nombre VARCHAR(45))
 
INSERT INTO #articulo VALUES (1,1,'Art1')
INSERT INTO #articulo VALUES (2,1,'Art2')
INSERT INTO #articulo VALUES (3,1,'Art3')
INSERT INTO #articulo VALUES (4,1,'Art4')
INSERT INTO #articulo VALUES (5,2,'Art5')
INSERT INTO #articulo VALUES (6,2,'Art6')
Necesito obtener todos los clientes que compraron todos los artículos de la sección 1 (Art 1, Art 2, Art 3 y Art 4) ó que compraron todos los artículos de la seccion 2 (Art 5 y Art 6)

Osea todos los artículos de una sección (sea cual sea)

Se entiende?
  #9 (permalink)  
Antiguo 27/07/2015, 13:41
 
Fecha de Ingreso: agosto-2010
Mensajes: 126
Antigüedad: 14 años, 3 meses
Puntos: 9
Respuesta: Como puedo resolver esta consulta en MYSQL?

Gianchu, de verdad entendes tablas temporales..?? si así es, como no podes resolver esa sencilla consulta.
  #10 (permalink)  
Antiguo 27/07/2015, 13:53
 
Fecha de Ingreso: julio-2015
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Como puedo resolver esta consulta en MYSQL?

Entiendo de tablas temporales, ya he realizado muchas que requieren tablas temporales, hasta trabajé con triggers, procedures y demás, pero ésta me enloqueció

A mi no me parece tan sencilla
  #11 (permalink)  
Antiguo 27/07/2015, 13:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como puedo resolver esta consulta en MYSQL?

Código SQL:
Ver original
  1. CREATE TABLE #Seccion (
  2.   Codigo_Seccion INT NOT NULL,
  3.   Nombre VARCHAR(45))
  4.  
  5. INSERT INTO #seccion VALUES (1,'Seccion1')
  6. INSERT INTO #seccion VALUES (2,'Seccion1')
  7. INSERT INTO #seccion VALUES (3,'Seccion1')
  8. INSERT INTO #seccion VALUES (4,'Seccion1')
  9. INSERT INTO #seccion VALUES (5,'Seccion1')
  10. INSERT INTO #seccion VALUES (6,'Seccion1')
  11.  
  12. CREATE TABLE #Articulo (
  13.   Codigo_Articulo INT NOT NULL ,
  14.   Codigo_Seccion INT NOT NULL,
  15.   Nombre VARCHAR(45))
  16.  
  17. INSERT INTO #articulo VALUES (1,1,'Art1')
  18. INSERT INTO #articulo VALUES (2,1,'Art1')
  19. INSERT INTO #articulo VALUES (3,1,'Art1')
  20. INSERT INTO #articulo VALUES (2,2,'Art2')
  21. INSERT INTO #articulo VALUES (7,2,'Art2')
  22. INSERT INTO #articulo VALUES (3,3,'Art3')
  23. INSERT INTO #articulo VALUES (8,3,'Art3')
  24. INSERT INTO #articulo VALUES (4,4,'Art4')
  25. INSERT INTO #articulo VALUES (9,4,'Art4')
  26. INSERT INTO #articulo VALUES (5,5,'Art5')
  27. INSERT INTO #articulo VALUES (10,5,'Art5')
  28. INSERT INTO #articulo VALUES (6,6,'Art6')
  29. INSERT INTO #articulo VALUES (11,6,'Art6')
  30.  
  31.  
  32. CREATE TABLE #Pedido (
  33. ID_Pedido INT NOT NULL,
  34. Codigo_Articulo INT NOT NULL ,
  35. DNI_Cliente VARCHAR(16) NOT NULL)
  36.  
  37. INSERT INTO #pedido VALUES (1,1,'11234')
  38. INSERT INTO #pedido VALUES (2,2,'11234')
  39. INSERT INTO #pedido VALUES (3,3,'11234')
  40. INSERT INTO #pedido VALUES (4,4,'11234')
  41. INSERT INTO #pedido VALUES (5,5,'11234')
  42. INSERT INTO #pedido VALUES (6,5,'11234')
  43. INSERT INTO #pedido VALUES (7,1,'11234')
  44.  
  45. INSERT INTO #pedido VALUES (1,1,'11235')
  46. INSERT INTO #pedido VALUES (1,2,'11235')
  47. INSERT INTO #pedido VALUES (1,3,'11235')
  48. INSERT INTO #pedido VALUES (1,3,'11235')
  49. INSERT INTO #pedido VALUES (1,3,'11235')
  50. INSERT INTO #pedido VALUES (1,4,'11235')
  51. INSERT INTO #pedido VALUES (1,5,'11235')
  52. INSERT INTO #pedido VALUES (1,6,'11235')
  53.  
  54.  
  55. CREATE TABLE #Cliente (
  56.   DNI_Cliente VARCHAR(45) NOT NULL ,
  57.  Nombre VARCHAR(45) )
  58.  
  59.  INSERT INTO #cliente VALUES ('1234','Libras')
  60.  INSERT INTO #cliente VALUES ('12345','Libras1')
  61.  
  62.  
  63. SELECT * FROM(
  64. SELECT dni_cliente,Codigo_Seccion, COUNT(codigo_seccion) AS total FROM(
  65. SELECT DISTINCT DNI_Cliente,Codigo_Seccion,t2.Codigo_Articulo FROM #pedido AS t1
  66. LEFT JOIN #Articulo AS t2 ON (t1.Codigo_Articulo=t2.Codigo_Articulo)
  67. ) AS t3
  68. GROUP BY Codigo_Seccion,DNI_Cliente
  69. ) AS t4
  70. LEFT JOIN (SELECT COUNT(*) total, Codigo_Seccion FROM #articulo GROUP BY codigo_seccion) AS t5 ON (t4.total=t5.total AND t4.Codigo_Seccion=t5.Codigo_Seccion)
  71. WHERE t5.total IS NOT NULL AND t5.Codigo_Seccion IS NOT NULL

si vemos los datos los 2 usuarios han comprado los 3 productos de la seccion 1, pero ninguno ha comprado los 2 productos de las demas secciones por lo que solo aparecerian los datos de la seccion1

dni_cliente Codigo_Seccion total total Codigo_Seccion
11234 1 3 3 1
11235 1 3 3 1

La consulta no es "tan sencilla" como te han dicho, si fuera tan sencilla porque nada mas yo te estoy poniendo queries ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 27/07/2015, 14:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como puedo resolver esta consulta en MYSQL?

Cita:
Iniciado por uagrm Ver Mensaje
Libras, entiendo que eres muy bueno en sql, pero debes saber que mucha gente recién está dando sus primeros pasos en este lenguaje, Gianchu no pudo hacer una sencilla consulta peor va entender como trabajar con tablas temporales. Gianchu como muchos otros que preguntamos necesitamos con nos ayuden no que nos compliquen más.
A ver una cosa son las tablas temporales y otra cosa subqueries, tabla temporal es una tabla que vive en la memoria del manejador de datos cierto tiempo, subquery es un query anidado si se quiere ver de esa manera que es lo que estoy proponiendo, lo de las tablas temporales lo hago para que se entienda el problema(que vean que datos use y que resultado me da) ademas no voy a estar creando y dropeando tablas "normales" cada ves que respondo en el foro.......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 27/07/2015, 14:15
 
Fecha de Ingreso: julio-2015
Mensajes: 6
Antigüedad: 9 años, 3 meses
Puntos: 0
Respuesta: Como puedo resolver esta consulta en MYSQL?

Muchas gracias !!

Etiquetas: mysql, null, resolver, tabla
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 10:59.