[Pgsql-ayuda] Full outer join

jtaaribi jtaaribi@terra.es
Tue, 23 Dec 2003 09:55:22 +0100


 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.

 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

 Que creo que es mejor que mis anteriores alternativas:

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

  select t1.num, t2.num, t1.col1, t2.col3
  from t1 left outer join t2 on
       t1.num = t2.num and
       t2.col4 = 5
  where t1.col2 = 1
  union
  select t2.num, t1.col1, t2.col3
  from t1 right outer join t2 on
       t1.num = t2.num and
       t1.col2 = 1
  where t2.col4 = 5 and
        t1.num is null

 Probaré de todas formas con explain analyze

 Muchas gracias por todo

 Saludos

 Iñaki


-----Mensaje original-----
De: pgsql-ayuda-admin@tlali.iztacala.unam.mx
[mailto:pgsql-ayuda-admin@tlali.iztacala.unam.mx]En nombre de Martin
Marques
Enviado el: lunes, 22 de diciembre de 2003 19:05
Para: jtaaribi; pgsql-ayuda@tlali.iztacala.unam.mx
Asunto: Re: RV: [Pgsql-ayuda] Full outer join


El Lun 22 Dic 2003 12:23, jtaaribi escribió:
>
>  Muchas gracias Manuel por responderme.

No soy Manuel, soy Matrín! :-)

>  Creo que el subselect no me soluciona el problema. Si he entendido bien,
el
> resultado de la subselect sería:
>
>   num | col1 | col2 | col3 | col4
>  -----+--------------------------
>     1 |  a   |  1   | xxx  |  5
>     2 |  b   |  1   | null | null
>     3 |  c   |  2   | null | null
>     2 | null | null | yyy  |  6
>     5 | null | null | zzz  |  5
>
>  Al limitar en el where de la select con t.col2 = 1 and t.col4 = 5, como
> resultado sólo se obtendría:
>
>   num | col1 | col3
>  -----+------------
>     1 |  a   | xxx
>
>
>  Pero el resultado que yo deseo es:
>
>   num | col1 | col3
>  -----+------------
>     1 |  a   | xxx
>     2 |  b   | null
>     5 | null | zzz
>
>  ¿Es así ¿Alguna alternativa?

No uses AND, usa OR.

--
select 'mmarques' || '@' || 'unl.edu.ar' AS email;
-----------------------------------------------------------------
Martín Marqués                  |        mmarques@unl.edu.ar
Programador, Administrador, DBA |       Centro de Telemática
                       Universidad Nacional
                            del Litoral
-----------------------------------------------------------------

_______________________________________________
Pgsql-ayuda mailing list
Pgsql-ayuda@tlali.iztacala.unam.mx
http://tlali.iztacala.unam.mx/mailman/listinfo/pgsql-ayuda