Re: three table join - Mailing list pgsql-novice

From Oliver Elphick
Subject Re: three table join
Date
Msg-id 1099413588.28319.138.camel@linda
Whole thread Raw
In response to three table join  (Kumar S <ps_postgres@yahoo.com>)
Responses Re: three table join
List pgsql-novice
On Tue, 2004-11-02 at 05:49 -0800, Kumar S wrote:
> Dear Group,
> I have two tables 1. Contacts and 2. Experiment.
>
> I have another link table con_exp_link table.
>
> Contacts
> Con_id
> con_fname
> con_lname
> con_address
>
>
> Experiment
> exp_id
> exp_name
> exp_scientist
> exp_publication.
>
>
>
> con_exp_link
> con_exp_id

I guess con_exp_id is meant to be a primary key in this table; I believe
it should be unnecessary, since the primary key can be the combination
of the other two fields:

  CREATE TABLE con_exp_link (
     con_id   some_type  REFERENCES contacts (con_id),
     exp_id   some_type  REFERENCES experiment (exp_id),
     PRIMARY KEY (con_id, exp_id)
  );

> con_id
> exp_id
>
>
> In this link table I have nothing but primary keys of
> experiment and contacts table.
>
>
> Now my question:
>
> How can I fill the link table. I am highly confused.

INSERT INTO con_exp_link SELECT c.con_id, e.exp_id FROM contacts AS c,
experiment AS e;

That implicit join will create the Cartesian product of contact and
experiment and put every possible combination into con_exp_link.  If
that is too broad, you will have to constrain the join in some way so as
to produce only the legal combinations.

Alternatively, construct a 2 column flat file of legal combinations,
with the columns separated by tab, and use COPY to load con_exp_link
from it.

--
Oliver Elphick                                          olly@lfix.co.uk
Isle of Wight                              http://www.lfix.co.uk/oliver
GPG: 1024D/A54310EA  92C8 39E7 280E 3631 3F0E  1EC0 5664 7A2F A543 10EA
                 ========================================
     "Fear none of those things which thou shalt suffer;
      behold, the devil shall cast some of you into prison,
      that ye may be tried; and ye shall have tribulation
      ten days; be thou faithful unto death, and I will give
      thee a crown of life."           Revelation 2:10


pgsql-novice by date:

Previous
From: Sean Davis
Date:
Subject: Re: three table join
Next
From: Aleksandar Dezelin
Date:
Subject: Re: Importing Microsoft Sql Server 2000