Re: JOIN a table twice for different values in the same query

From: "Daniel Hernandez" <breydan(at)excite(dot)com>
To: cww(at)denterprises(dot)org, pgsql-sql(at)postgresql(dot)org
Subject: Re: JOIN a table twice for different values in the same query
Date: 2008-01-10 22:21:53
Message-ID: 20080110222153.639A58B31B@xprdmxin.myway.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

js=# SELECT departure_date, departure.code AS departure_code, arrival.code as arraival_codeFROM jsjourneys JOIN jsports as departure ON jsjourneys.departure_port = departure.id JOIN jsports as arrival on jsjourneys.arraival_port = arraival.id LIMIT4;
Regards,Daniel Hernndez.San Diego, CA.&quot;The more you learn, more you earn&quot;. --- On Thu 01/10, Colin Wetherbee &lt; cww(at)denterprises(dot)org &gt; wrote:From: Colin Wetherbee [mailto: cww(at)denterprises(dot)org]To: pgsql-sql(at)postgresql(dot)orgDate: Thu, 10 Jan 2008 17:07:00 -0500Subject: [SQL] JOIN a table twice for different values in the same queryGreetings.I have two tables I'm having a little trouble figuring out how to JOIN.One contains a list of airports along with their IATA codes, cities, names, and so forth. This table also contains an id column, which is a serial primary key.The other table contains a list of flights, each of which has a departure_port and an arrival_port, which are foreign keys referencing the id field of the first table.I would like to construct a query on the flight table that returns the names of both the departure port and the arrival port.The following query shows how I would get just the departure port.js=# SELECT departure_date, jsports.code AS
departure_code FROMjsjourneys JOIN jsports ON jsjourneys.departure_port = jsports.id LIMIT4; departure_date | departure_code----------------+---------------- 2006-11-19 | ATL 2006-11-16 | ATL 2006-11-19 | BHM 2007-02-03 | BOS(4 rows)When I SELECT jsports.code, the result comes from the JOIN ... ON jsjourneys.departure_port = jsports.id.I would *also* like to include something in the query to get the jsports.code for jsjourneys.arrival_port, but I'm unsure how to do this, since SELECTing jsports.code twice would be ambiguous (and, in any case, just duplicates the departure_code).I'd like to produce a result set that looks something like the following (which doesn't come from a real query). departure_date | departure_code | arrival_code----------------+----------------+-------------- 2006-11-19 | ATL | JFK 2006-11-16 | ATL | DFW 2006-11-19 | BHM | IAH 2007-02-03 | BOS | LAXI'd appreciate some
help.FYI, table definitions for jsjourneys and jsports follow.js=# \d jsjourneys Table &quot;public.jsjourneys&quot; Column | Type | Modifiers---------------------+--------------------------+--------------------------------------------------------- id | bigint | not null default nextval('jsjourneys_id_seq'::regclass) userid | bigint | not null typeid | integer | not null carrier | integer | number | integer | departure_port | integer | not null arrival_port | integer | not null departure_gate | character varying | arrival_gate | character varying | departure_date | date | not null fare_class | integer |
scheduled_departure | timestamp with time zone | scheduled_arrival | timestamp with time zone | actual_departure | timestamp with time zone | actual_arrival | timestamp with time zone | equipment | integer | notes | character varying(1500) | seat | character varying(4) | confirmation | character varying(20) |Indexes: &quot;jsjourneys_pkey&quot; PRIMARY KEY, btree (id)Foreign-key constraints: &quot;jsjourneys_arrival_port_fkey&quot; FOREIGN KEY (arrival_port) REFERENCES jsports(id) &quot;jsjourneys_carrier_fkey&quot; FOREIGN KEY (carrier) REFERENCES jscarriers(id) &quot;jsjourneys_departure_port_fkey&quot; FOREIGN KEY (departure_port) REFERENCES jsports(id) &quot;jsjourneys_equipment_fkey&quot; FOREIGN KEY (equipment) REFERENCES jsequipment(id) &quot;jsjourneys_fare_class_fkey&quot; FOREIGN KEY (fare_class) REFERENCES jsfareclasses(id)
&quot;jsjourneys_typeid_fkey&quot; FOREIGN KEY (typeid) REFERENCES jsjourneytypes(id) &quot;jsjourneys_userid_fkey&quot; FOREIGN KEY (userid) REFERENCES jsusers(id)js=# \d jsports Table &quot;public.jsports&quot; Column | Type | Modifiers -----------+-------------------+------------------------------------------------------ id | integer | not null default nextval('jsports_id_seq'::regclass) code | character varying | not null city | character varying | not null full_city | character varying | not null name | character varying |Indexes: &quot;jsports_pkey&quot; PRIMARY KEY, btree (id) &quot;jsports_index_city&quot; btree (city) &quot;jsports_index_code&quot; btree (code)Thanks!Colin---------------------------(end of broadcast)---------------------------TIP 4: Have you searched our list archives? http://archives.postgresql.org

_______________________________________________
Join Excite! - http://www.excite.com
The most personalized portal on the Web!

Browse pgsql-sql by date

  From Date Subject
Next Message Colin Wetherbee 2008-01-10 22:22:20 Re: JOIN a table twice for different values in the same query
Previous Message Paul Lambert 2008-01-10 22:18:56 Re: JOIN a table twice for different values in the same query