Skip site navigation (1) Skip section navigation (2)

RE: [Pgsql-ayuda] Full join de tres tablas

From: "Rafael Vigata" <rvigata(at)sipec(dot)es>
To: "Alvaro Herrera" <alvherre(at)dcc(dot)uchile(dot)cl>
Cc: "Lpostgres (E-mail)" <pgsql-ayuda(at)tlali(dot)iztacala(dot)unam(dot)mx>
Subject: RE: [Pgsql-ayuda] Full join de tres tablas
Date: 2004-02-13 08:52:05
Message-ID: 3E4C5135046BD74F8EBA6A3A99FC3E700BEA07@dos.sipec.es (view raw or flat)
Thread:
Lists: pgsql-es-ayuda
Gracias Alvaro,

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

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 
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 
from 
(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=a.id_iinterno
left join stock s on totaltmp.id_iinterno=s.id_iinterno
left join info_etiqueta i on totaltmp.id_iinterno=i.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í:

INTERNO    ARTICULOS     STOCK     INFO_ETIQUETA
__________________________________________________

  10          1           0             0
  11          0           1             1

Etc... 

Gracias por todo.
    saludos,

             Rafa

 

Rafael Vigata
Programador Retail Software
rvigata(at)sipec(dot)es <mailto:rvigata(at)sipec(dot)es>   

Tel.  934 800 560
Fax  934 800 505

Sipec
Soluciones informáticas para el comercio


-----Mensaje original-----
De: Alvaro Herrera [mailto:alvherre(at)dcc(dot)uchile(dot)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 ...

-- 
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")

pgsql-es-ayuda by date

Next:From: Armando MaldonadoDate: 2004-02-13 12:32:32
Subject: Re: [Pgsql-ayuda] OID de un registro. Virus en "pgsql-ayuda.mbox"
Previous:From: Alexander Quilca CondoriDate: 2004-02-13 04:56:45
Subject: [Pgsql-ayuda] InfoServer

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group