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

Error al crear vista

Estas en el tema de Error al crear vista en el foro de Mysql en Foros del Web. Hola a todos como estan veran tengo el siguiente problema cuando trato de crear la siguiente vista cuyo codigo antes se encontraba dentro de un ...
  #1 (permalink)  
Antiguo 18/02/2016, 11:44
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 7 meses
Puntos: 2
Error al crear vista

Hola a todos como estan veran tengo el siguiente problema cuando trato de crear la siguiente vista cuyo codigo antes se encontraba dentro de un SP el cual funciona bien
aqui mi codigo
Código MySQL:
Ver original
  1. estatus_seguimiento_diario_pap AS
  2. SELECT CASE orden
  3. WHEN 1 THEN Responsable
  4. WHEN 2 THEN Descripcion
  5. END AS Responsable,
  6. Blanco, Naranja,    Rojo
  7. FROM (SELECT CONCAT(jc_usuario_nombre,' ',jc_usuario_apellidos) AS Responsable,
  8. sp.jc_servicio_descripcion  AS Descripcion,
  9. (SELECT COUNT(1) FROM seg_pap WHERE seg_estatus_id IN(9,10,11) AND jc_usuario_id = sgc.jc_usuario_id
  10. AND 3 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())) Blanco,
  11. (SELECT COUNT(*) FROM seg_pap
  12. WHERE seg_estatus_id IN (9,10,11) AND jc_usuario_id = sgc.jc_usuario_id
  13. AND 1 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())
  14. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=2) Naranja,
  15. (SELECT COUNT(*) FROM seg_pap
  16. WHERE seg_estatus_id IN (9,10,11) AND jc_usuario_id = sgc.jc_usuario_id
  17. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=0) Rojo,
  18. sgc.jc_usuario_id   AS Usuario_Id,
  19. 1 AS orden
  20. FROM seg_pap sgc
  21. INNER JOIN usuarios_crm us ON sgc.jc_usuario_id = us.jc_usuario_id
  22. JOIN (seg_pap_servicio sps LEFT JOIN servicio sp ON sp.jc_servicio_id = sps.jc_servicio_id)
  23. WHERE sps.jc_servicio_id
  24. GROUP BY jc_usuario_nombre, jc_usuario_apellidos, sgc.jc_usuario_id
  25. SELECT CONCAT(jc_usuario_nombre,' ',jc_usuario_apellidos) AS Responsable,
  26. sp.jc_servicio_descripcion  AS Descripcion,
  27. (SELECT COUNT(*) FROM seg_pap spgc , seg_pap_servicio spg
  28. WHERE seg_estatus_id IN(9,10,11) AND spg.jc_servicio_id = sps.jc_servicio_id AND spg.seg_pap_id = spgc.seg_pap_id
  29. AND spgc.jc_usuario_id = sgc.jc_usuario_id AND 3 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())) Blanco,
  30. (SELECT COUNT(*) FROM seg_pap spgc , seg_pap_servicio spg
  31. WHERE seg_estatus_id IN (9,10,11) AND spg.jc_servicio_id = sps.jc_servicio_id AND spg.seg_pap_id = spgc.seg_pap_id
  32. AND spgc.jc_usuario_id = sgc.jc_usuario_id AND 1 <= DATEDIFF(seg_pap_fecha_proximo_contac,NOW())
  33. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=2 ) Naranja,
  34. (SELECT COUNT(*) FROM seg_pap spgc , seg_pap_servicio spg
  35. WHERE seg_estatus_id IN (9,10,11) AND spg.jc_servicio_id = sps.jc_servicio_id AND spg.seg_pap_id = spgc.seg_pap_id
  36. AND spgc.jc_usuario_id = sgc.jc_usuario_id
  37. AND DATEDIFF(seg_pap_fecha_proximo_contac,NOW()) <=0 )Rojo,
  38. sgc.jc_usuario_id,
  39. 2 AS orden
  40. FROM    seg_pap sgc
  41. INNER JOIN  usuarios_crm us ON sgc.jc_usuario_id = us.jc_usuario_id
  42. JOIN(seg_pap_servicio sps INNER JOIN servicio sp ON sp.jc_servicio_id = sps.jc_servicio_id)
  43. GROUP BY sp.jc_servicio_descripcion,sps.jc_servicio_id, sgc.jc_usuario_id) dato
  44. ORDER BY dato.Usuario_Id ASC, dato.orden ASC
el error que me muestra es el siguiente
Código MySQL:
Ver original
  1. /* Error de SQL (1349): View's SELECT contains a subquery in the FROM clause */
no se aun que esta mal
  #2 (permalink)  
Antiguo 18/02/2016, 12:01
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: Error al crear vista

Una VIEW en MySQL no puede contener subconsultas, te lo está diciendo el mensaje de error devuelto.

Todas las subconsultas que existan deben transformarse en vistas separadas, o bien componer un único JOIN de múltiples tablas.
__________________
¿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 18/02/2016, 12:45
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Error al crear vista

Eso si lo se por eso consulto en este foro para que me de una orientacion por otro lado tengo otras vista con algo similar solo que sin un CASE y el UNION ALL bueno veré que estoy haciendo mal como mencionas tu
  #4 (permalink)  
Antiguo 18/02/2016, 13:30
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: Error al crear vista

Ya te dije: debes rediseñar TODA la query para que no existan subconsultas.
En caso de no poder hacerlo, cada subconsulta deberá ser una VIEW separada, la cual deberás usar un gran join múltiple que pueda cumplir lo que quieres.

Por lo pronto le di una mirada general a tu query y veo muchas subconsultas inútilmente separadas, cuando podrían integrarse en una sola consulta. La consulta tal y como la tienes es muy, pero MUY ineficiente y mal armada.
Yo te diría que la armes de nuevo, pariendo de la premisa de no usar NINGUNA subconsulta.
A mi entender, con lo que alcanzo a ver, es posible.
No te puedo poner un ejemplo basado en tu caso porque no tengo ni tus tablas ni tus datos para hacer pruebas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 18/02/2016, 13:48
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Error al crear vista

pues si me lo mencionas de esa manera lo hice asi porque el resultado de esa consulta es algo asi
Código HTML:
Ver original
  1. Responsable Comercial   | Blanco  | Narnajas    |Rojo
  2. Ursula Chavez                  63           9    13
  3. CIC-N                            16             7                 9
  4. PCV                                   2            0                  0
  5. CIC                                   28              12                 1
  6. PCP                                   1            0               0
  7. CEX                                   3            1    1
  8. PCJ 7   0   0
  9. TaTBC   3   0   0
  10. CTC 3   1   0
  11. TaNeg   0   0   0
  12. Hilda Tello 42  3   11
  13. CIC 29  0   4
  14. PCP 1   0   0
  15. CEX 0   1   1
  16. PCJ 1   0   0
  17. TaTBC   0   1   1
  18. CTC 3   0   2
  19. TaNeg   0   0   0
  20. CIC-N   8   1   3
  21. PCV 0   0   1
pues rehaser la consulta sin sub consultas no si es que me resulte algo como lo que estoy mostrando anteriormente
Gracias por tu atencion al tema
  #6 (permalink)  
Antiguo 18/02/2016, 13:52
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: Error al crear vista

Sin tener tus tablas de datos, no puedo hacer pruebas, ya te lo dije. SOlamente podría hacer una evaluación teórica, pero sigo creyendo que es perfectamente posible...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/02/2016, 14:17
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Error al crear vista

Pues aqui tengo mis tablas
Código MySQL:
Ver original
  1. // Tabla 1
  2. CREATE TABLE IF NOT EXISTS `seg_pap` (
  3.   `seg_pap_id` int(11) NOT NULL,
  4.   `jc_usuario_id` int(11) DEFAULT NULL,
  5.   `jc_empresa_id` int(11) DEFAULT NULL,
  6.   `jc_contacto_id` int(11) DEFAULT NULL,
  7.   `jc_actividad_id` int(11) DEFAULT NULL,
  8.   `seg_estatus_id` int(11) DEFAULT NULL,
  9.   `seg_referencia_id` int(11) DEFAULT NULL,
  10.   `seg_pap_fecha_requerimiento` date DEFAULT NULL,
  11.   `seg_pap_fecha_ultimo_contac` date DEFAULT NULL,
  12.   `seg_pap_fecha_proximo_contac` date DEFAULT NULL,
  13.   `jc_unidad_negocio_id` int(11) DEFAULT NULL,
  14.   `seg_pap_observaciones` varchar(500) DEFAULT NULL
  15. // Tabla 2
  16. CREATE TABLE IF NOT EXISTS `seg_pap_servicio` (
  17.   `seg_pap_id` int(11) DEFAULT NULL,
  18.   `jc_servicio_id` int(11) DEFAULT NULL,
  19.   `seguimiento_pap_programa_id` int(11) DEFAULT NULL,
  20.   `seg_pap_programa_fecha` date DEFAULT NULL,
  21.   `seg_pap_valor_venta` decimal(15,0) DEFAULT NULL
  22. // Tabla 3
  23. CREATE TABLE IF NOT EXISTS `servicio` (
  24.   `jc_servicio_id` int(11) NOT NULL,
  25.   `jc_unidad_negocio_id` int(11) DEFAULT NULL,
  26.   `jc_servicio_descripcion` varchar(30) DEFAULT NULL
  27. // Informacion Tabla 1
  28. INSERT INTO `seg_pap` (`seg_pap_id`, `jc_usuario_id`, `jc_empresa_id`, `jc_contacto_id`, `jc_actividad_id`, `seg_estatus_id`, `seg_referencia_id`, `seg_pap_fecha_requerimiento`, `seg_pap_fecha_ultimo_contac`, `seg_pap_fecha_proximo_contac`, `jc_unidad_negocio_id`, `seg_pap_observaciones`) VALUES
  29. (126, 6, 117, 123, 4, 10, 10, '2015-11-12', '2015-11-19', '2015-11-27', 6, ''),
  30. (127, 6, 109, 115, 7, 9, 4, '2015-11-13', '2015-11-27', '2015-11-30', 6, ''),
  31. (128, 6, 134, 157, 6, 15, 5, '2015-11-19', '2015-11-26', '2015-11-27', 6, 'Hola'),
  32. // Informacion Tabla 2
  33. INSERT INTO `seg_pap_servicio` (`seg_pap_id`, `jc_servicio_id`, `seguimiento_pap_programa_id`, `seg_pap_programa_fecha`, `seg_pap_valor_venta`) VALUES
  34. (126, 15, NULL, '2016-02-12', '45000'),
  35. (126, 17, NULL, NULL, '6000'),
  36. (126, NULL, NULL, NULL, '0'),
  37. (126, NULL, NULL, NULL, '0')
  38. //Informacion Tabla 3
  39. INSERT INTO `servicio` (`jc_servicio_id`, `jc_unidad_negocio_id`, `jc_servicio_descripcion`) VALUES (13, 6, 'CIC'),
  40. (14, 6, 'CIC-N'),
  41. (15, 6, 'CTC'),
  42. (16, 6, 'CEX'),
  43. (17, 6, 'PCV'),
  44. (18, 6, 'PCJ'),
  45. (19, 6, 'PCP'),
  46. (20, 6, 'CTAC');
con estas tres tablas son las que me muestra la informacion que mostre anteriormente por el momento reformulare mi consulta
  #8 (permalink)  
Antiguo 18/02/2016, 15:02
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: Error al crear vista

LO analizo, y te comento.
TE anticipo un detalle: Si observas con cuidado, los valores que buscas en las subconsultas tienen condiciones comunes, y sólo cambia un dato en la comparación... Si usaras ese solo dato para cada columna virtual con una función IF(), las subconsultas practicamente se pueden eliminar.

Eso es lo que voy a analizar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 18/02/2016, 15:22
 
Fecha de Ingreso: abril-2015
Mensajes: 304
Antigüedad: 9 años, 7 meses
Puntos: 2
Respuesta: Error al crear vista

Pues viendolo de ese modo no lo he intentado pero las sub consultas que vez alli como por ejemplo lo de los colores son porque tengo campos con fechas los cuales dentro de esa sub consulta cumple una condición dado que esos campos no existen dentro de las tablas claro que si recomiendas otra forma mucho mejor pues bienvenido pero la verdad no se me habia ocurrido con un if de todas formas tambien lo analizare por mi lado

Gracias por tu atencion al tema

Etiquetas: fecha, join, select, sql, vista
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 03:26.