From: | Ron Johnson <ron(dot)l(dot)johnson(at)cox(dot)net> |
---|---|
To: | PgSQL General ML <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: 3 way outer join dilemma |
Date: | 2003-08-19 17:05:00 |
Message-ID: | 1061312700.18259.377.camel@haggis |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Tue, 2003-08-19 at 11:13, terry(at)ashtonwoodshomes(dot)com wrote:
> Uh, sorry. Explicitly stating t1.fid = X and t2.vid = Y was to imply that,
> but a better example would be:
>
> SELECT t1.fid, t1.t1_data, t2.vid, t2.t2_data, t3.t3_data
> FROM t1, t2, t3
> WHERE t1.fid = X
> AND t2.vid = Y
> AND t1.id = t2.id
> AND t3.fid = t1.fid
> AND t3.vid = t2.vid
>
> Now, I discover that the record in t3 may not always exist,
> so somehow I want to do an outer join...
>
> SELECT t1.fid, t1.t1_data, t2.vid, t2.t2_data, t3.t3_data
> FROM t1, t2, OUTER JOIN t3 ON (t3.fid = t1.fid AND t3.vid = t2.vid)
> WHERE t1.fid = X
> AND t2.vid = Y
> AND t1.id = t2.id
How about:
SELECT t1.fid, t1.t1_data, t2.vid, t2.t2_data, t3.t3_data
FROM (t1 join t2 on t1.id = t2.id)
LEFT OUTER JOIN t3 on (t3.fid = t1.fid AND t3.vid = t2.vid)
WHERE t1.fid = X
AND t2.vid = Y
;
> Thanks
>
> Terry Fielder
> Manager Software Development and Deployment
> Great Gulf Homes / Ashton Woods Homes
> terry(at)greatgulfhomes(dot)com
> Fax: (416) 441-9085
>
>
> > -----Original Message-----
> > From: pgsql-general-owner(at)postgresql(dot)org
> > [mailto:pgsql-general-owner(at)postgresql(dot)org]On Behalf Of scott.marlowe
> > Sent: Tuesday, August 19, 2003 11:55 AM
> > To: terry(at)ashtonwoodshomes(dot)com
> > Cc: Postgres (E-mail)
> > Subject: Re: [GENERAL] 3 way outer join dilemma
> >
> >
> > On Mon, 18 Aug 2003 terry(at)ashtonwoodshomes(dot)com wrote:
> >
> > > Here's what I have (simplified)
> > >
> > > SELECT t1.fid, t1.t1_data, t2.vid, t2.t2_data, t3.t3_data
> > > FROM t1, t2, t3
> > > WHERE t1.fid = X
> > > AND t2.vid = Y
> > > AND t3.fid = t1.fid
> > > AND t3.vid = t2.vid
> > >
> > > Now, I discover that the record in t3 may not always exist,
> > so somehow I
> > > want to do an outer join...
> > >
> > > SELECT t1.fid, t1.t1_data, t2.vid, t2.t2_data, t3.t3_data
> > > FROM t1, t2, OUTER JOIN t3 ON (t3.fid = t1.fid AND t3.vid = t2.vid)
> > > WHERE t1.fid = X
> > > AND t2.vid = Y
> > >
> > > But I get the statement that "t1 is not part of JOIN"
> >
> > If t3 may not have a record, then how can you be using it to join t2 ?
> >
> > It seems that if t3 doesn't exist, then of course "AND t3.vid
> > = t2.vid" is
> > going to be "AND NULL = t2.vid" which of course, will always
> > be false,
> > i.e. you'll never be able to join t2. Is there a common key
> > between t2
> > and t1?
--
-----------------------------------------------------------------
Ron Johnson, Jr. ron(dot)l(dot)johnson(at)cox(dot)net
Jefferson, LA USA
"Man, I'm pretty. Hoo Hah!"
Johnny Bravo
From | Date | Subject | |
---|---|---|---|
Next Message | Jeffrey Melloy | 2003-08-19 17:07:57 | Re: Grouping by date range |
Previous Message | P.J. "Josh" Rovero | 2003-08-19 16:47:38 | 7.4b1 vs 7.3.4 performance |