Re: showing multiple REFERENCE details of id fields in single query that share the same table

From: Thomas O'Connell <tfo(at)sitening(dot)com>
To: fmiddleton(at)verizon(dot)net
Cc: pgsql-sql(at)postgresql(dot)org
Subject: Re: showing multiple REFERENCE details of id fields in single query that share the same table
Date: 2005-09-15 05:16:12
Message-ID: AE7033A4-E297-4BE6-A404-EBF9C318735D@sitening.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql


On Sep 14, 2005, at 8:11 PM, Ferindo Middleton Jr wrote:

> I have a table which has two id fields which REFERENCE data back at
> another table. It's setup like this:
>
> class_prerequisite_bindings(id SERIAL, class_id INTEGER
> REFERENCES classes(id), prerequisite INTEGER REFERENCES classes
> (id))
>
> The classes table is like this:
> classes(id SERIAL, course_title TEXT, course_code TEXT)
>
> I have the following query:
> SELECT * FROM class_prerequisite_bindings, classes WHERE
> class_prerequisite_bindings.class_id = 64 AND
> class_prerequisite_bindings.class_id = classes.id;
>
> If I run the query above, the result will only give me info about
> the class_id field matching id 64 back in the classes table.
> PROBLEM: I want this query to also show the info about the
> prerequisite field which would also have info at the classes table.
> This query will only show the course_title and course_code of the
> class_id but I need this for the prerequisite field as well. I
> think I need to do a JOIN, but I don't understand how. How can I do
> this?
>
> Ferindo

This isn't the prettiest query in the world, but it's a starting
point. The RIGHT JOIN allows you to include the columns you want for
prerequisites that don't themselves have prerequisites.

SELECT *
FROM class_prerequisite_bindings, classes
WHERE class_prerequisite_bindings.class_id = 64
AND class_prerequisite_bindings.class_id = classes.id
UNION ALL
SELECT *
FROM class_prerequisite_bindings
RIGHT JOIN classes
ON classes.id = class_prerequisite_bindings.class_id
WHERE classes.id = (
SELECT prerequisite
FROM class_prerequisite_bindings
WHERE class_id = 64
);

--
Thomas F. O'Connell
Co-Founder, Information Architect
Sitening, LLC

Strategic Open Source: Open Your i™

http://www.sitening.com/
110 30th Avenue North, Suite 6
Nashville, TN 37203-6320
615-469-5150
615-469-5151 (fax)

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Neil Saunders 2005-09-15 09:25:19 Triggers & Conditional Assignment
Previous Message Ferindo Middleton Jr 2005-09-15 01:11:37 showing multiple REFERENCE details of id fields in single query that share the same table