From: | Jaime Casanova <systemguards(at)gmail(dot)com> |
---|---|
To: | Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx> |
Cc: | Victor <victor(dot)perez(at)e-evolution(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: pgsql-es-ayuda |
Date: | 2005-06-29 16:19:49 |
Message-ID: | c2d9e70e0506290919334d0495@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
On 6/29/05, Manuel Sugawara <masm(at)fciencias(dot)unam(dot)mx> wrote:
> Victor <victor(dot)perez(at)e-evolution(dot)com> writes:
>
> > es lo que me te mìa, pero bueno veamos que se puede hacer, este es la
> > sentencia SQL:
> >
> > UPDATE I_BPartner i SET C_BPartner_Location_ID=(SELECT
> C_BPartner_Location_ID
> > FROM C_BPartner_Location bpl INNER JOIN C_Location l ON
> > (bpl.C_Location_ID=l.C_Location_ID)
> > WHERE i.C_BPartner_ID=bpl.C_BPartner_ID AND
> bpl.AD_Client_ID=i.AD_Client_ID
> > AND DUMP(i.Address1)=DUMP(l.Address1) AND
> DUMP(i.Address2)=DUMP(l.Address2)
> > AND DUMP(i.City)=DUMP(l.City) AND DUMP(i.Postal)=DUMP(l.Postal) AND
> > DUMP(i.Postal_Add)=DUMP(l.Postal_Add) AND
> > DUMP(i.C_Region_ID)=DUMP(l.C_Region_ID) AND
> > DUMP(i.C_Country_ID)=DUMP(l.C_Country_ID))
> > WHERE C_BPartner_ID IS NOT NULL AND C_BPartner_Location_ID IS NULL AND
> > I_IsImported='N'
> >
> > lo que entiendo que hace es comparar dos valores de distintas tablas
> > convirtiendolos en hexadecimal de esa manera identifica que sean
> > exactos.
>
> La comparación me parece un tanto ociosa por no decir perfectamente
> inútil. Como cambiaría la sentencia si en vez de decir:
>
> DUMP(i.Address1)=DUMP(l.Address1)
>
> simplemente dices:
>
> i.Address1 = l.Address1
>
> Si entendí bien lo que hace dump, no cambiaría. Por lo tanto quita
> todos los dump's y estas listo. La pregunta es: ¿por qué no lo
> hicieron así originalmente?. Probablemente que hay algo aqui que no
> estamos viendo :-(.
>
Segun yo entendi, DUMP no solo te saca el contenido sino tambien el
tamaño del campo y el tipo de dato. Asi que lo que el select esta
comprobando es que sea exactamente el mismo tipo de dato y longitud de
campo, a mas del contenido.
Aunque por lo general los FK's van a coincidir en eso veras bases en
la que un int4 esta haciendo referencia a un campo en otra tabla cuyo
PK es un int2.
No me parece razonable, IMHO, hacer eso ya que el constraint se
establece sobre los datos no la longitud del campo o el tipo de dato.
--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)
From | Date | Subject | |
---|---|---|---|
Next Message | Hugo Gamarra | 2005-06-29 16:32:20 | RE: |
Previous Message | Manuel Sugawara | 2005-06-29 16:17:25 | Re: |