![]() |
Otra consulta SQL
Buenas otra ves. (SQLServer)
lo que necesito hacer ahora es actualizar un campo con la suma de todos los valores de los registros que se encuentran en otra tabla tabla1.campo = 9 <----- tabla2.campo = 4, 5 (son varios registros) Código:
update a_llamadas |
no se si te servirá, pero lo que si puedes hacer es algo así
Código:
update tabla a Espero te sirva |
Hola.
Puedes usar subconsultas. Creo que algo así te serviria : Código:
update a_llamadas set |
Gracias Cadetill , eso lo tenia en mente pero realmente en las tablas que manejo de unos 1.800.000 (por ahora )se pone muy lento el asunto..
de hecho proble eso y tambien hacer un select y correr con un cursor un Update por cada registro del select y es mucho mas eficiente eso, casi un tercio del tiempo, al contrario de lo q yo suponia... pero sigue siendo lento.... :( |
Marc , justo estaba posteando al mismo tiempo que tu....... pero tengo la misma respuesta :(
Gracias de todos modos a ambos |
Hola.
Si va lento, comprueba que en la tabla a_llamadas_segmento tengas un índice para el campo id_empleado (o si intervienen más campos en la condición, comprueba que tengas un índice compuesto formado por esos campos). Una consulta de este tipo, con los índices adecuados, no debería ser exageradamente lenta. Saludos. |
Bien, tengo definido id_empleado y otro campo que necesito como indice, sin embargo la consulta con la Subconsulta es lo suficiente lenta como para pensar una alternativa....
De hecho me ha dado mejor resultado poner un cursor (al que lo trabajo como si fuera un While ) que usar esta query con subconsultas, yo estimo que esto sucede por la cantidad de registros..... pero ahora voy a probar con una tabla temporal y les cuento ..... (este tipo de situaciones me recuerdan al cuento del fisico que estaba posteado en humor.... Siempre hay que buscar la mejor solucion) |
Hola.
La ventaja del cursor es que solo tiene que acceder una vez a los datos, y calcula la suma para los dos campos. Mientras que con subconsultas, hay que poner 2 subconsultas. Por lo que se realiza dos veces la consulta a los registros relacionados, para sumar los respectivos campos. Alguna vez he tenido que hacer consultas con subconsultas sobre tablas con más de 100.000 registros, y cuando asignas los índices adecuados he conseguido que se ejecuten muy rapido. Aunque si en este caso, el numero de registros a sumar en la subconsulta es muy elevado, ningún indice conseguirá mejorar el rendimiento de un cursor, que también aprovecha los índices y solo recorre una vez los registros relacionados. Saludos. |
Como siempre Marc , muchas gracias ....
es verdad lo que comentas , ya lo habia notado.. ... pero en este caso la mejor solucion(que pude encontrar) es con una tabla temporal.... Creo una TablaTemporal, le inserto la Consulta con los resultados y luego realizo un Updete directo con esta tabla. por lo que solo ejecuto dos consultas... es mucho mejor que usar el cursor y las subconsultas.... Muchisimas Gracias nuevamente.... y no se olviden que siempre es posible mejorar lo que hacemos... tan solo basta con mirar los problemas desde otros puntos.... Saludos ;) |
La franja horaria es GMT +2. Ahora son las 21:18:22. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi