RE: [Pgsql-ayuda] Full outer join

From: "jtaaribi" <jtaaribi(at)terra(dot)es>
To: "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>, "Martin Marques" <martin(at)bugs(dot)unl(dot)edu(dot)ar>
Cc: <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: RE: [Pgsql-ayuda] Full outer join
Date: 2003-12-23 16:08:24
Message-ID: KDEJLCEJADFALPGJIEKGCEBNDDAA.jtaaribi@terra.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Creo que ha habido un mal entendido ;-)

Cuando Martín me ha dicho que usase OR en vez de AND, yo entendía que me
decía que utilizase la consulta:

select t.num, t.col1, t.col3
from (select t1.num,t1.col1, t2.col3 from
t1 full outer join t2 on
t1.num = t2.num) t
where
t.col2 = 1 OR
t.col4 = 5

Con la que el problema es que se pueden obtener más valores de los
deseados.

Aunque parece que quería decirme, tal y como me aclara Alvaro:

select t.num, t.col1, t.col3
from (select t1.num,t1.col1, t2.col3 from
t1 full outer join t2 on
t1.num = t2.num) t
where
(t.col2 = 1 OR t.col2 is null) and
(t.col4 = 5 OR t.col4 is null)

Haciendo pruebas con explain analyze, la consulta más eficiente con
diferencia es la que destaca como razonable Alvaro:

select tt1.num, tt2.num, tt1.col1, tt2.col3
from (select t1.num, t1.col1, t1.col2 from
t1 where t1.col2 = 1) tt1
full outer join
(select t2.num, t2.col3, t2.col4 from
t2 where t2.col4 = 5) tt2 on
tt1.num = tt2.num

Siento que la consulta al final no haya sido concretamente de PostgreSql,
por lo que la próxima vez intentaré adquirir el libro que me aconseja Martín
antes de acudir a la lista ;-)

Muchas gracias por todo. Felices fiestas y próspero año nuevo

Iñaki

-----Mensaje original-----
De: pgsql-ayuda-admin(at)tlali(dot)iztacala(dot)unam(dot)mx
[mailto:pgsql-ayuda-admin(at)tlali(dot)iztacala(dot)unam(dot)mx]En nombre de Alvaro
Herrera
Enviado el: martes, 23 de diciembre de 2003 14:00
Para: jtaaribi
CC: Martin Marques; pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
Asunto: Re: [Pgsql-ayuda] Full outer join

On Tue, Dec 23, 2003 at 09:55:22AM +0100, jtaaribi wrote:
> Muchas gracias Martín por tu respuesta y perdona por haberme equivocado
con
> tu nombre ;-)
>
> Con los datos del caso del ejemplo que he puesto, sí que valdría con OR.
> Pero no en general, ya que quiero que se cumplan _ambas_ condiciones a la
> vez pero sin excluir los null.

No entiendo por que no sirve WHERE a=2 OR a IS NULL ?

> Se me ha ocurrido una nueva SQL:
>
> select tt1.num, tt2.num, tt1.col1, tt2.col3
> from (select t1.num, t1.col1, t1.col2 from
> t1 where t1.col2 = 1) tt1
> full outer join
> (select t2.num, t2.col3, t2.col4 from
> t2 where t2.col4 = 5) tt2 on
> tt1.num = tt2.num

Parece razonable ...

--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"La felicidad no es mañana. La felicidad es ahora"
_______________________________________________
Pgsql-ayuda mailing list
Pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx
http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Gorka 2003-12-23 16:32:07 [Pgsql-ayuda] Arrancar PostgreSQL 7.0
Previous Message Fernando Romo 2003-12-23 15:26:48 Re: [Pgsql-ayuda] N Procesadores (Es la solucion)