Re: showing multiple REFERENCE details of id fields in single query that share the same table - Mailing list pgsql-sql

From Thomas O'Connell
Subject Re: showing multiple REFERENCE details of id fields in single query that share the same table
Date
Msg-id AE7033A4-E297-4BE6-A404-EBF9C318735D@sitening.com
Whole thread Raw
In response to showing multiple REFERENCE details of id fields in single query that share the same table  (Ferindo Middleton Jr <fmiddleton@verizon.net>)
List 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)

pgsql-sql by date:

Previous
From: Ferindo Middleton Jr
Date:
Subject: showing multiple REFERENCE details of id fields in single query that share the same table
Next
From: Neil Saunders
Date:
Subject: Triggers & Conditional Assignment