[Pgsql-ayuda] Full join de tres tablas

Rafael Vigata rvigata@sipec.es
Fri, 13 Feb 2004 09:52:05 +0100


Gracias Alvaro,

    finalmente consegu=ED lo que quer=EDa mientras esperaba a ver que =
respond=EDa la gente de la lista, y es justo lo que t=FA dijiste. El =
problema es que a veces nos emperramos en un tipo de soluci=F3n y se =
necesita algo de perspectiva para solucionar las cosas, o intentar =
buscar desde otro lado...=20

Bueno, os muestro la consulta tal y como queda al final, justo haciendo =
lo que propone Alvaro: Un union de los internos (campos clave) de las =
tres tablas y luego un left join  con con cada una de ellas.


SELECT=20
totaltmp.id_iinterno,
CASE WHEN a.id_iinterno IS NOT NULL THEN 1
ELSE 0
END AS articulo,
CASE WHEN s.id_iinterno IS NOT NULL THEN 1
ELSE 0 END AS stock,
CASE WHEN i.id_iinterno IS NOT NULL THEN 1
ELSE 0
END AS info=20
from=20
(select articulos.id_iinterno from articulos
union
select stock.id_iinterno from stock
union
select info_etiqueta.id_iinterno from info_etiqueta) as totaltmp
left join articulos a on totaltmp.id_iinterno=3Da.id_iinterno
left join stock s on totaltmp.id_iinterno=3Ds.id_iinterno
left join info_etiqueta i on totaltmp.id_iinterno=3Di.id_iinterno;


Esto me da cuatro columnas: La primera tiene todos los internos, y las =
otras tres tienen un 1 en caso de que exista el interno en su tabla. =
As=ED:

INTERNO    ARTICULOS     STOCK     INFO_ETIQUETA
__________________________________________________

  10          1           0             0
  11          0           1             1

Etc...=20

Gracias por todo.
    saludos,

             Rafa

=20

Rafael Vigata
Programador Retail Software
rvigata@sipec.es <mailto:rvigata@sipec.es>  =20

Tel.  934 800 560
Fax  934 800 505

Sipec
Soluciones inform=E1ticas para el comercio


-----Mensaje original-----
De: Alvaro Herrera [mailto:alvherre@dcc.uchile.cl]
Enviado el: jueves, 12 de febrero de 2004 21:21
Para: Rafael Vigata
CC: Lpostgres (E-mail)
Asunto: Re: [Pgsql-ayuda] Full join de tres tablas

No existen los full joins de tres tablas.  De hecho, todos los joins son
de dos tablas.  Ahora, lo que si existe es hacer un join con otro join.

Creo que lo que necesitas es hacer un full join y luego un left join con
la tercera tabla.  No, de hecho eso no funcionara si tienes IDs que solo
esten en la tercera tabla ... bueno, no estoy en condiciones de hacer
experimentos en este momento, pero creo que deberias jugar con los otros
tipos de outer join.  Quizas necesites hacer UNION de los IDs en las
tres tablas, y luego hacer JOIN con ellas mismas.

O quizas necesites arreglar el modelo ...

--=20
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
Officer Krupke, what are we to do?
Gee, officer Krupke, Krup you! (West Side Story, "Gee, Officer Krupke")