edición general
444 meneos
17859 clics
La consulta SQL de la desesperación

La consulta SQL de la desesperación  

El compañero de Jeroen tuvo la mala suerte de ser asignado a depurar un error intermitente sin especificar en una de las más antiguas de las aplicaciones heredadas. "La buena noticia es que lo he aislado a una consulta de base de datos", dijo Jeroen, "la mala noticia es que lo he aislado a una consulta de base de datos." Sabiendo que su colega no era un gran fan de bases de datos, Jeroen ofreció su ayuda. En respuesta, recibió la siguiente imagen. "Yo no creo que nadie me puede ayudar", escribió el amigo.

| etiquetas: consulta , sql , desesperación , imposible , jeroen , bbdd , base de datos
226 218 1 K 545 mnm
226 218 1 K 545 mnm
Comentarios destacados:                          
#15 Yo he visto consultas SQL que vosotros no creeríais: atacar BBDD más allá de Orión, he visto código en C brillar en la oscuridad cerca de la puerta de Tanhauser...
«12
  1. ¡Madre del amor hermoso!
  2. Un SELECT, ¿dónde está el problema? SQL básico.
  3. ¡Hostia puta! No pude evitar decirlo en alto xD
  4. Esta claro que ese ERD no estaba muy bien diseñado... o es que querian hacer una export de la BD haciendo join entre todas las tablas ?

    una consulta que requiere de más de 7 tablas suele sugerir un grave error de diseño del ERD
  5. #4 O del PLQN
  6. En momentos como este es cuando uno se levanta del asiento y echa a correr presa del pánico mientras agita los brazos, con la esperanza de que le atropelle un camión.
  7. Pues este dice que se encarga de encontrar el problema:
  8. Yo pido la baja por depresión al momento de ver eso..
  9. Yo me he tenido que enfrentar más de una vez (y más de 100) con sentencias SQL de más de 2000 líneas, así que no os quejéis...
  10. Que buena idea para ponérselo de examen a los alumnos.

    No para que se maten a solucionarlo, si no por que muchas cabezas piensan más que una sola, y te darán miles de soluciones xD
  11. "Las bases de datos más complejas que excel o dbase3 suelen conducir a los responsables de su funcionamiento al suicidio"

    Del "Manual de Satanás para la mejora del rendimiento de las calderas infernales"
  12. Pues como para que despues de ejecutarla, le de error porque falta un parentesis o una coma, :troll:
  13. Eso debe de ser lo que ejecutan para justificar la compra de un servidor nuevo.

    Que hijos de su madre ni lo indentan.
  14. Buah, eso se hace en 2 patás [modo jefe que no tiene ni puta idea off]
  15. Yo he visto consultas SQL que vosotros no creeríais: atacar BBDD más allá de Orión, he visto código en C brillar en la oscuridad cerca de la puerta de Tanhauser...
  16. Imagino que es el típico churro SQL que generan esas herramientas gráficas tan guays, en las que vas añadiendo tablas en un diagrama y arrastrando flechitas... Son muy divertidas y a los jefes les gustan mucho, pero ¡ay del pobriño programador que después tiene que tratar con ese código generado!
  17. Pobre hombre... así nos sentimos muchos informáticos a veces, aunque este caso es ya lo máximo :-)
  18. #15, tu lo que has visto es muchas veces blade runner. ;)
  19. Pues yo sólo veo una rubia, una morena, una pelirroja...
  20. #20 Sí que han oído hablar pero de las de la ventana...
  21. No seamos exagerados, si quitamos la cabecera y la firma del correo electrónico se queda en solo 5 páginas.
  22. ¡¡Acabo de abrir mi listado de aplicaciones a mantener y ahora mismo estoy besando la pantalla!! ¡¡Gracias MonEsVol, eres justo y misericordioso!!
  23. La virgensanta...
  24. ¿Has probado apagarlo y volver a encenderlo?  media
  25. ¡La veo! ¡La chica del vestido rojo!
  26. la autentica cojoquery!
  27. ese error se puede reducir bastante cambiando unos puntos la fuente de letras. ¡He dicho!
  28. Ya he visto el error, faltan unas comillas...
  29. Bueh, aquí delante tengo una de 1.400 líneas y no voy llorando por las esquinas :-D
    Haciendo un trim, son 9 páginas de Word a tamaño de fuente 9.

    Este tío es un principiante!

    Coñas aparte, es una SQL con 5 UNION ALL con multiples condiciones cada una. Es muy tocha pero no es realmente complicada. He visto sentencias de 50 líneas con muchísima más complicación. Pero es bad practice, claramente :-)
  30. Mis compañeras de clase ponen el grito en el cielo con un select ---- from a, b where a.cod=b.cod; no sé que opinaran de esto xD
  31. Deberían hacer mejores fotos porque casi no puedo leer nada (o copiar el texto).
  32. #10 O meterlo como un puzzle en un mmorpg (/stargate_universe).
    #15 "Codigo en C"
    cache.ohinternet.com/images/2/24/I_see_what_you_did_there_super.jpg
  33. En mi vida laboral me he encontrado con más de una y más de dos queries SQL de ese estilo. Si conoces bien el modelo de datos y lo que pretende conseguir la query, aun porque sino... buffff... es una auténtica locura...
  34. -SQL

    -¿Cuál?
  35. Y yo que pensaba que en mi aplicación tenía un SQL jodido porque tiene 62 líneas.
    Nunca volveré a decir que mi consulta es jodida.
  36. Esta consulta la ha escrito Chuck Norris !!!!
    xD xD xD
  37. #0 El problema es que, en la línea 17 de la 5ª página, hay puesto un "." en lugar de una "," al lado de un campo numérico y por éso es que arroja el error cuando el campo contiene decimales. De nada. ;)

    #37 Psssst, si se te oliva un paréntesis el error no es intermitente. De nada, también. :-)
  38. OMFG

    Una vez tuve que enfrentarme a un select de más o menos 200 campos y tardé casi una semana en descifrarlo. La solucíon pasó por hacer un análisis estadístico a ojo de buen cubero y separar las peticiones a cada tabla en un join, para luego encadenarlos por bloques. Meses más tarde decidimos empezar de cero una aplicación sin el famoso "botón-enviar-que-hace-gran-consulta"
  39. Ahora entiendo el éxito que están teniendo las Bases de Datos NoSql.
  40. #33 inner join ahí!

    #38 S
  41. Eso se resuelve con el asistente de access.. novatos!

    =)
  42. I ♥ SQL
  43. Yo veo eso y pido la dimisión. O me pagan un extra o me compensan de alguna forma. El problema es suyo y no mío. Suyo por no haber tomado las medidas pertinentes contra el que escribió eso.

    Cualquier consulta grande va en contra de todos los principios que haya en el diseño de software, incluso de los que se pueden romper como excepción a la norma.
  44. Jo, podrían haber puesto la sql en texto, así no hay que la depure!.
  45. Seguro que una vez indentada... se ve todo más claro!
  46. #33 Haz lo que dice #46, inner join a las compañeras esas!
  47. abusando de las subconsultas..
  48. #20 Se dice que es "legacy". Tal vez cuando se escribió no había esa clase de moderneces en el sistema que usen.
  49. he visto de un par de páginas y ya eran una burrada, pero de ¡6!
  50. Ostia !!!, me he cagao vivo... lo digo enserio. Pobre becario que le toque arreglar eso...
  51. #11 ¿Existe o vas a empezar a escribirlo hoy?
    #48 Nadie se escandaliza de una afirmación como esa y después van y se escandalizan del alto número de informáticos a los que les gusta el bestialismo xD :troll: xD
  52. #48 supongo que se te ha pasado por alto el trollface.
  53. De siempre la culpa de tener que hacer consultas SQL de cientos de lineas es no hacer una Entidad Relacion decente.
  54. Alquien podria explicar un poco lo extraordinario del asunto?
    A parte de 6 hojas llenas de texto?
    Gracias
  55. #61 Esa consulta SQL es exageradamente grande, y es preferible una patada fuerte en los huevos que intentar arreglarla.
  56. Si tabulas bien cada consulta, puedes ir aislando lo que se quería hacer en cada caso, y poco a poco (divide y vencerás) ir simplificando y optimizando el algoritmo hasta encontrar el problema.

    Humanizando código desde el año 2000.
  57. #61 Una consulta SQL es una petición a una base de datos, todas las bases de datos relacionales se consultan de esa manera... Lo normal es que sean muchísimo mas cortas (unas pocas líneas), una consulta de ese tamaño es una aberración, una salvajada.
  58. No es para asustarse... para empezar se vé en un vistazo rápido que le falta un paréntesis. Quien haya hecho tal burrada es más paquete que yo realizando consultas!
  59. ¡Se llama como yo! ¡SE LLAMA COMO YO!

    Perdón. Vivo en un pueblo y no estoy acostumbrado a ver o leer "Jeroen" en ningún lado, y cuando pasa me emociono...
  60. Yo me encuentro con eso y salgo corriendo... He visto aberraciones en consultas SQL; pero eso supera todo lo razonable.

    Claramente el programador original era un HdP (porque seguro que no está ni documentada) o, los más probable, han ido añadiendo parche sobre parche sobre parche y lo que era una consulta normal se ha convertido es un monstruo.
  61. ¿Y si le planta un "EXPLAIN" delante... funcionara? ¿Quemara el servidor? ¿Te devolvera un error "9999:NOFCKINGCLUE"? ¿La query fallara "intermitentemente y sin especificar"?

    #63 para tabular eso, me temo que necesitas un DIN A2 y un veterano de cobol
  62. Con lo fácil que es un Select * (all) .... :troll:
  63. #4 Una consulta de más de 7 tablas suele sugerir que debes pedir un aumento de sueldo.
  64. Que monte un concurso público. Algo así como esos concursos de saber que es lo que hace un programita de C cojo-ofuscado.

    Se le da 500$ al ganador, y seguro que se animan 300 becarios-wannabe a descifrarlo.
  65. #69 Ja! Mysql 5.x precisamente elimina esa posibilidad en los JOIN si hay dos campos llamados id. Donde esté el mysql 4.1...
  66. Joder. Yo sólo he programado algo en sistemas embebidos y similares (routers, y cosas de esas) y la verdad es que me sorprende que alguno de vosotros considere esto "frecuente". Me asusta que alguien pueda ver esto y decir "es más grande que lo que he visto, pero he visto algunas de ese estilo bastante grandes" ¿En qué mundo vivimos? ¿De verdad cuando consulto mi cuenta corriente puede haber uno de estos monstruos suelto en el sistema? Asusta

    Tampoco conozco SQL lo suficiente para hacerme una idea exacta de la complejidad de eso, pero mi intuición de programador me lleva a pensar que es un ejemplo de lo que no hay que hacer, y si esto se hace normalmente mi opinión de los programadores que usan SQL acaba de bajar bastante.
  67. Una vez me pasaron una incidéncia con dos consultas parecidas a esta, que si se ejecutaban a la vez iban muy lentas (de hecho se colgaban).

    Les dije que si, que me lo miraba. Abrí una carpeta especial para guardarlas y lo deje en un cajón. Creo que aún estan esperando una respuesta. Hará unos cuatro años.

    Como apunta alguien más arriba, estas consultas las generan con herramientas gráficas.
  68. #9 Sólo por curiosidad, qué se consulta en un SQL de 2000 líneas?
  69. #75 Si te lo dijera, tendria que matarte :troll:
  70. #75 normalmente responden a un MAL modelado de los datos, pero si no hay manera de cambiar los datos, te jodes y te comes la query.
  71. #63 #68 www.dpriver.com/pp/sqlformat.htm , por ejemplo. La única alternativa es empezar con un beautifier de esos (y eso teniendo medio claro el modelo de datos).
  72. Me imagino cuanto tardaría mi laptop en ejecutarla, 3-4 años?? Jojojojo q burrada!!!
  73. Con esa pesima estructuración, cualquiera pensaría lo mismo... He visto mayores
  74. #20 Haz una traza de lo que generas accediendo con .NET y M$ entities a SQL Server y verás que te sale algo similar; así se descubre el lazy-loading y cosas de esas que te pueden matar una BD...
  75. #3 También hay que decirlo más...
  76. Por lo poco que se ve ya he visto cinco o seis JOIN .... y eso no va bien.

    Supongo que es de una herramienta automática o de alguien que sabe mucho SQL pero muy poco de BD (la JOIN suele sentar como una patada en los dientes a la BD)
  77. ¿Alguien puede explicar este envió para gente que no entiende del tema? :-(
  78. Yo iba a decir que era una animalada, pero viendo la consulta más grande que tengo a mano, esoy mejor calladito.
  79. #85 es.wikipedia.org/wiki/SQL

    llevo años en informática. La consulta más grande que he visto apenas llegaba al folio, y era para hacer prácticas de subconsultas en clase xD
  80. #85 Las sentencias SQL son una forma de consultar información en una base de datos, mediante órdenes (instrucciones) de texto. Normalmente, estas instrucciones no sólo indican qué información se desea consultar, sino que también permiten filtrarla y realizar operaciones con ella.

    Normalmente, hasta las consultas más sencillas son propensas a fallos y hay que tener en cuenta muchos aspectos. Consultas de un par de líneas pueden dar muchísimos dolores de cabeza.

    La gracia de este envío es que todas esas páginas de papel que aparecen en la fotografía corresponden a una única instrucción SQL.
  81. #85 Aunque se explicase no creo que haga gracia a quien no sea programador. Aun asi aqui tienes la explicacion:

    SQL es un lenguaje de consulta que permite preguntar cosas a una base de datos, por ejemplo imaginate que tienes una base de datos con las fichas de todos los españoles y quieres saber que personas tienen como primer apellido "alvarez", pues escribirias una consulta SQL como que asi:

    select * from espanoles where apellido1='alvarez'

    Esta es una consulta muy sencillita pero puedes preguntar cosas mucho mas complicadas a la base de datos, de modo que pueden salir consultas mucho mas largas y grandes con instrucciones mas complejas.

    El post va de una consulta que tienen cientos de lineas: imaginate que te dan la lista de la compra para que vayas al supermercado, y al final resulta que son 50 paginas de ingredientes, miles de ellos, y te dicen que solo tienes 1 hora para hace la compra y que si te olvidas de comprar algun producto, o compras alguno de más tendras que repetirla.

    Pues salvando las distancias es algo parecido, es una locura diseñar una consulta de cientos de lineas, una aberracion: si esa consulta no devuelve la informacion para lo que en teoria se diseño, es decir tiene algun fallo, puede llegar a ser humanamente imposible descubrir cual es el error o tardar semanas o meses en descubrirlo.
  82. Increíble la de expertos que dicen que no es para tanto, deberían echarle una mano al pobre chaval.

    No se me da nada mal el SQL, pero me piden que busque un error intermitente en esa query y me echo a llorar.
  83. #6 En momentos como este miras la cabecera del procedimiento a ver si el desgraciado ha puesto su nombre, para ir a su casa y llevarlo a ostias hasta la pantalla del ordenador para que explique en qué estaba pensando cuando la hizo.

    (Sí, he tenido recientemente casos similares, aunque quizá no tan bestias).

    #85 Con una SQL puedes obtener datos de tablas de base de datos. El código SQL es muy potente (si eres habil puedes sacar mucha información y muy bien filtrada con muy pocas líneas de código), y cuanto más largas son las consultas aumenta exponencialmente la posibilidad de que haya un error en ellas, y también hace cada vez más difícil la posibilidad de detectarlo. Con ese tamaño de letra, una consulta así de una página ya sería una locura, así que todo eso es simplemente una chapuza.
  84. Estoy con #63 Si le quitas tabulaciones y retornos de carro a cualquier programa, se ve prácticamente igual (incluso mucho peor). Yo creo que han imprimido eso para la foto y poco más. No cuesta ni dos segundos de proceso añadir algo de orden a eso (lineas en blanco y tabulaciones).

    #66 Te he encontrado en www.abctelefonos.com. Si que es un nombre poco común ;-D
  85. Joder, si se hiciera una versión para programadores de THE RING y la gente muriese al ver algo, sería esa consulta xD.

    Además de la consulta, que tiene su gracia, me gustaría saber como lo resolvió. Yo lo habría reprogramado entero, toda la puta aplicación entera, para evitar ese engendro.
  86. frikis !!! :-P
  87. #72 De ahí el troll :-P
    Me gustaría ver la estructura de esa bd, para necesitar semejante chorizo!
  88. Por lo que veo, aquí el que menos soluciona esta consulta con la punta del... en fin... cuanta chuleria por dios...
  89. #8 Yo directamente demando a mi empresa por bulling

    #9 La query más compleja que me ha tocado optimizar tenía 86 líneas (no se me olvida en la vida) y un plan de ejecución infernal, el día que me toque una de más de 100 líneas hago lo que dice #8
  90. y lo más cachondo es que seguro que nadie sabe qué es lo que hace la consulta de las narices ... :-)
  91. Es que empezaron a pedir cambios de requerimientos durante el desarrollo y claro.....
  92. #85 el SQL es el lenguaje para poder comunicarse con un Sistema Gestor de Bases de datos (SGBD) que es un software que permite crear y manipular bases de datos.

    Es un lenguaje en teoría universal y permite consultar, insertar y borrar datos de una base de datos.

    Puedes lanzar sentencias SQL directamente contra la base de datos utilizando alguna herramienta que se conecte a la misma o si estas programando una aplicación en cualquier lenguaje introducir esas sentencias en el código para que sea ese programa se comunique con la bd.

    Después de escribir este comentario, el código de meneame generará (al menos) una sentencia SQL de inserción y la lanzara a la base de datos para introducir este comentario en la BD.
«12
comentarios cerrados

menéame