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)