Re: Fwd: COMPARACION DE DOS TUPLAS

From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Yelimar Rebolledo <yelimar(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Fwd: COMPARACION DE DOS TUPLAS
Date: 2007-06-26 21:08:26
Message-ID: 20070626210826.GL11609@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Yelimar Rebolledo escribió:
> Hola! Quiero implementar una especie de join y para eso necesito saber si
> dos tuplas de dos tablas son iguales de la siguiente manera:
> OID att1 OID att2
> OID att1 att2
> ( a , 5 ) ( a , 2 ) Como hacen match por el
> identificador Obtendría ----> ( a , 5 , 2 )
>
> Si quisiera comparar:
> OID att1 OID att2
>
> ( a , 5 ) ( b , 7 ) Como no hacen match por el
> identificador, no se realiza join

Me parece que lo que tienes que hacer es obtener el operador que tiene
la estrategia BTreeEqualStrategyNumber del opclass por omision para el
tipo de dato en cuestion, ejecutarlo y verificar si entrega verdadero o
falso. Algo asi como

{
Operator oper;

oper = equality_oper(descr->attrs[i]->atttypid, true);

if (DatumGetBool(OidFunctionCall2(oprfuncid(oper), old_values[i],
new_values[i])))
{
/* Values are equal */
}
else
{
/* Values are different */
}
}

donde descr es el TupleDescriptor de la tupla en cuestion. Obviamente
primero debes saber cuales son los attnum de las columnas que forman la
llave primaria.

--
Alvaro Herrera Valdivia, Chile ICBM: S 39º 49' 18.1", W 73º 13' 56.4"
"How amazing is that? I call it a night and come back to find that a bug has
been identified and patched while I sleep." (Robert Davidson)
http://archives.postgresql.org/pgsql-sql/2006-03/msg00378.php

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message fredy zurita freire 2007-06-26 21:21:39 Mis primero pasos con Postgresql
Previous Message Alvaro Herrera 2007-06-26 21:04:02 Re: Transacciones!