Thread: Optional join
Hi, I trying to write a query that will join 2 tables. Here's the concept: Table 1: table1, primary key pk1 Table 2: table2, primary key pk2 One of the fields (f2) in table2 contains either the primary key of table1 or a NULL value. So normally a pretty basic query: SELECT table1.*, table2.pk2 FROM table1, table2 WHERE table2.f2 = table1.pk1; BUT what I would like to do is show all records of Table 1 even if there is no match in Table 2. Meaning that the reultscould be table1... table2.pk2 table1... NULL Doable? Thanks.
On Thu, Aug 14, 2003 at 10:40:02 -0400, Slawek Jarosz <Jarosz.S@ems-t.ca> wrote: > Hi, > > I trying to write a query that will join 2 tables. Here's the concept: > Table 1: table1, primary key pk1 > Table 2: table2, primary key pk2 > > One of the fields (f2) in table2 contains either the primary key of table1 or a NULL value. So normally a pretty basicquery: > > SELECT table1.*, table2.pk2 FROM table1, table2 WHERE table2.f2 = table1.pk1; > > BUT what I would like to do is show all records of Table 1 even if there is no match in Table 2. Meaning that the reultscould be > table1... table2.pk2 > table1... NULL > > Doable? You use outer joins to do this. Something like: SELECT table1.*, table2.pk2 FROM table1 left join table2 on table2.f2 = table1.pk1;
On Thu, 14 Aug 2003, Slawek Jarosz wrote: > Hi, > > I trying to write a query that will join 2 tables. Here's the concept: > Table 1: table1, primary key pk1 Table 2: table2, primary key pk2 > > One of the fields (f2) in table2 contains either the primary key of > table1 or a NULL value. So normally a pretty basic query: > > SELECT table1.*, table2.pk2 FROM table1, table2 WHERE table2.f2 = > table1.pk1; > > BUT what I would like to do is show all records of Table 1 even if > there is no match in Table 2. Meaning that the reults could be > table1... table2.pk2 > table1... NULL See outer joins. Something like: SELECT table1.*,table2.pk FROMtable1 LEFT OUTER JOIN table on (table2.f2=table1.pk1);
"Slawek Jarosz" <Jarosz.S@ems-t.ca> wrote: > Hi, > I trying to write a query that will join 2 tables. Here's the > concept: > Table 1: table1, primary key pk1 > Table 2: table2, primary key pk2 > One of the fields (f2) in table2 contains either the primary key of > table1 or a NULL value. So normally a pretty basic query: > SELECT table1.*, table2.pk2 > FROM table1, table2 WHERE table2.f2 = table1.pk1; > BUT what I would like to do is show all records of Table 1 even if > there is no match in Table 2. Meaning that the reults could be > table1... table2.pk2 > table1... NULL > Doable? Yes. SELECT table1.*, table2.pk2 FROM table1 LEFT OUTER JOIN table2 ON (table1.pk1 = table2.pk2); HTH :) Cheers, D -- David Fetter david@fetter.org http://fetter.org/ phone: +1 510 893 6100 cell: +1 415 235 3778 Power over a man's subsistence is power over his will. Alexander Hamilton
On Thursday 14 August 2003 16:40, Slawek Jarosz wrote: > Hi, > > I trying to write a query that will join 2 tables. Here's the concept: > Table 1: table1, primary key pk1 > Table 2: table2, primary key pk2 > > One of the fields (f2) in table2 contains either the primary key of table1 > or a NULL value. So normally a pretty basic query: > > SELECT table1.*, table2.pk2 FROM table1, table2 WHERE table2.f2 = > table1.pk1; > > BUT what I would like to do is show all records of Table 1 even if there is > no match in Table 2. Meaning that the reults could be table1... > table2.pk2 > table1... NULL > > Doable? You need an OUTER JOIN, see e.g. http://www.postgresql.org/docs/7.3/static/tutorial-join.html Ian Barwick barwick@gmx.net