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
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! |