[Pgsql-ayuda] Full outer join

jtaaribi jtaaribi@terra.es
Tue, 23 Dec 2003 17:08:24 +0100


 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@tlali.iztacala.unam.mx
[mailto:pgsql-ayuda-admin@tlali.iztacala.unam.mx]En nombre de Alvaro
Herrera
Enviado el: martes, 23 de diciembre de 2003 14:00
Para: jtaaribi
CC: Martin Marques; pgsql-ayuda@tlali.iztacala.unam.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@tlali.iztacala.unam.mx
http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda