Re: Problemas para realizar update

From: Paola Alejandra de Montserrat Cordero Bon <paola(dot)cordero(dot)b(at)gmail(dot)com>
To: "Guillermo E(dot) Villanueva" <guillermovil(at)gmail(dot)com>
Cc: "Eduardo Arenas C(dot)" <edomax(at)gmail(dot)com>, Jaime Casanova <jaime(at)2ndquadrant(dot)com>, POSTGRES <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problemas para realizar update
Date: 2015-07-15 20:15:50
Message-ID: CAChXvRgy6PVdtsOxUiyn2S_RNOcEuMT6-fT3EUC0DnMq+0ThBg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Muchas gracias....resulto con el left join y con el exists

probé estas dos y funcionaron bien...

select p1.cod_p from p1 where not exists (select p2.cod_p from p2 where
p1.cod_p = p2.cod_p) ;

select p1.cod_p from p1 left join p2 on p1.cod_p = p2.cod_p where p2.cod_p
is null

Claro que para la tabla con 3.500.000 la segunda opción no me sirve porque
los tiempos se disparan....pero con la primera funciona bien.

infinitas gracias por la ayuda....

El 14 de julio de 2015, 21:24, Guillermo E. Villanueva <
guillermovil(at)gmail(dot)com> escribió:

> Hola porque no pruebas con NOT EXISTS o con un LEFT JOIN buscando los
> nulos del lado derecho?
>
> El 14 de julio de 2015, 17:47, Paola Alejandra de Montserrat Cordero Bon <
> paola(dot)cordero(dot)b(at)gmail(dot)com> escribió:
>
>> Estimado:
>>
>> He realizado un index sobre la clave primaria, que es la que más
>> consultas llevará. Cambie a otras tablas más pequeñas, del orden de 200.000
>> registros (tuplas)
>>
>> intentando esta instrucción
>>
>> select matriculados_2011.mrun from matriculados_2011 where
>> matriculados_2011.mrun not in (select matriculados_2012.mrun from
>> matriculados_2012) ;
>>
>> Que básicamente es seleccionar los casos en que un alumno aparece
>> matriculado en un año y no en el siguiente...
>>
>> y la ejecucion demora mucho más de lo que me esperaba...
>>
>> sinceramente no le veo el error para que se demore tanto...
>>
>> Agradecería me puedan iluminar al respecto.
>>
>>
>> El 7 de julio de 2015, 11:21, Eduardo Arenas C. <edomax(at)gmail(dot)com>
>> escribió:
>>
>>> Paola, algunos tips:
>>>
>>> - indexa los campos por los que estas haciendo el where em ambas tablas,
>>> - Intenta que ninguna de las tablas tenga valores nulos en los id que
>>> estas utilizando en el where
>>> - si los id esta en formato integer la cosa este tipo de actualizaciones
>>> corre bastante mas rápido.
>>> - quizás el <> te esta haciendo mas demoras la consulta. quizás puedes
>>> hacer una tabla temporal que filtre esta condición antes para que tu update
>>> sea mas limpio.
>>>
>>> Saludos
>>>
>>> Eduardo
>>>
>>> El 1 de julio de 2015, 9:10 p. m., Paola Alejandra de Montserrat Cordero
>>> Bon<paola(dot)cordero(dot)b(at)gmail(dot)com> escribió:
>>>
>>>> estimados:
>>>>
>>>> Gracias por el aporte de Jaime Casanova pude avanzar un poco, veras
>>>> ahora sólo estoy intentando hacerle un update a una sola variable. Esta es
>>>> la situación, son tres tablas, tabla 1, tabla 2 y tabla 3 en promedio cada
>>>> una tiene 3.500.000 de tuplas, comparten en común una variable llamada
>>>> mrun (clave primaria en todas). Tabla2 y tabla3 tienen las mismas columnas
>>>> y nombres de variables. Tabla1 tiene las variables de tabla2 con 6
>>>> variables adicionales más, siendo la que quiero hacerle el update una de
>>>> ellas.
>>>> La idea es que esta variable, a la que le quiero hacer el update, tome
>>>> valores 1 si tabla.mrun = tabla2.mrun y tabla2.mrun no existe en
>>>> tabla3.mrun o tome valores 0 si tabla1.mrun = tabla2.mrun y tabla2.mrun
>>>> existe en tabla3.mrun
>>>>
>>>>
>>>> Ahora bien,he probado con varias consultas, y actualmente estoy
>>>> probando con esta:
>>>>
>>>> update tabla3 set variable=1 where exists (select tabla2.mrun,
>>>> tabla3.mrun from tabla2, tabla3 where tabla1.mrun = tabla2.mrun and
>>>> tabla2.mrun<>tabla3.mrun)
>>>>
>>>> Pero después de cuatro horas de procesamiento (aún sin detenerse)
>>>> entiendo que algo no anda bien.
>>>>
>>>> Por eso apelo a su experiencia porque necesito verificar que se este
>>>> haciendo bien y optimizar la consulta ...desde ya muchisimas gracias.....
>>>>
>>>> El 29 de junio de 2015, 22:56, Jaime Casanova <jaime(at)2ndquadrant(dot)com>
>>>> escribió:
>>>>
>>>>> 2015-06-29 17:58 GMT-05:00 Paola Alejandra de Montserrat Cordero Bon
>>>>> <paola(dot)cordero(dot)b(at)gmail(dot)com>:
>>>>> > Buenas noches comunidad, les pido ayuda sobre una operación de
>>>>> > actualización. Tengo dos tablas, tabla 1, tabla 2, tienen en común
>>>>> varias
>>>>> > variables, quedando fuera cuatro que estan en la segunda tabla
>>>>> (tabla 2).
>>>>> > Hice una tercera tabla, tabla 3, donde le cargue la información
>>>>> completa de
>>>>> > la tabla 1, quedando pendiente actualizar con las variables no
>>>>> comunes de la
>>>>> > tabla 2.
>>>>> >
>>>>> > Use los siguientes comandos:
>>>>> >
>>>>> > Para insertar los datos en común: insert into tabla_3 (variable1, ...
>>>>> > variable_n) select variable1, ... variable_n from tabla_1 TODO Bien
>>>>> acá...
>>>>> >
>>>>> > Para actualizar estos usando el siguiente comando: update tabla_3 set
>>>>> > (variable1, variable2, variable3, variable4) = (variable1, variable2,
>>>>> > variable3, variable4 from tabla_2 where tabla_2.variable1 =
>>>>> > tabla_3.variable1)
>>>>> >
>>>>>
>>>>> UPDATE tabla_3
>>>>> SET variable_1 = tabla_2.variable_1,
>>>>> variable_2 = tabla_2.variable_2,
>>>>> ...
>>>>> variable_n = tabla_2.variable_n
>>>>> FROM tabla_2
>>>>> WHERE tabla_2.variable_1 = tabla_3.variable_1;
>>>>>
>>>>>
>>>>> fijate en el FROM, aunque lo que quieres hacer debería ser lo
>>>>> correcto postgres aun no lo implementa y por eso existe la posibilidad
>>>>> *NO* estandar de usar la clausula FROM en el UPDATE.
>>>>>
>>>>> en la versión 9.5 me parece que se podrá hacer como se debería.
>>>>>
>>>>> --
>>>>> Jaime Casanova www.2ndQuadrant.com
>>>>> Professional PostgreSQL: Soporte 24x7 y capacitación
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Paola Alejandra de Montserrat Cordero Bon
>>>>
>>>
>>>
>>>
>>> --
>>> Eduardo Arenas
>>> +56 0 9 6629 1618
>>>
>>>
>>>
>>
>>
>> --
>> Paola Alejandra de Montserrat Cordero Bon
>>
>
>

--
Paola Alejandra de Montserrat Cordero Bon

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2015-07-15 21:28:23 Re: duda sobre pgpool
Previous Message Fabio Bon 2015-07-15 16:37:49 RE: Ayuda con problema de "Encoding" (supongo)