Обсуждение: Help with query
I'm new to SQL and I am having a little difficulty trying to construct
a query that will use the first table in the following list:
TABLE coaching_relationships:
coaching_relationship_id
coach_id
athlete_id
TABLE athletes
athlete_id
user_id
TABLE coaches
coach_id
user_id
TABLE users
user_id
user_name
And use sub-queries (or joins???) to return user names for the coaches
and athletes like this:
Coach | Athletes
=================
Bill | Marge
Bill | Anne
Mary | Judith
Simon | Esther
Simon | Raymond
Simon | Phyllis
...etc...
I can't seem to make the leap from this:
select c.user_id, a.user_id from athletes a, coaches c,
coaching_relationships cr where a.athlete_id = cr.athlete_id and
c.coach_id = cr.coach_id;
which gives me:
user_id | user_id
---------+---------
1 | 1
8 | 1
9 | 2
3 | 4
3 | 5
3 | 6
8 | 10
8 | 11
9 | 7
To resolving it to names...can I use a sub-query to do this? Any
chance somebody can show me how?
Thanks,
Ryan
Ryan,
> select c.user_id, a.user_id from athletes a, coaches c,
> coaching_relationships cr where a.athlete_id = cr.athlete_id and
> c.coach_id = cr.coach_id;
You're close:
select cuser.username as coach, auser.username as athlete
from athletes, coaches, coaching_relationships co_rel,
users cuser, users auser
where athletes.athlete_id = co_rel.athlete_id
and coaches.coach_id = co_rel.coach_id
and coaches.user_id = cuser.user_id
and athletes.user_id = auser.user_id
order by cuser.username, auser.username
And some unsolicited advice: don't abbreviate table names which are less than
10 characters. When you have to revisit these queries in 9 months, you won't
want to see all those "c" and "a" and "a1" tablename aliases. It's like
using programming variables named "x" and "y".
--
Josh Berkus
Aglio Database Solutions
San Francisco
Many thanks Josh for the solution and the advice... On Wed, 11 Aug 2004 21:48:50 -0700, Josh Berkus <josh@agliodbs.com> wrote: > Ryan, > > > select c.user_id, a.user_id from athletes a, coaches c, > > coaching_relationships cr where a.athlete_id = cr.athlete_id and > > c.coach_id = cr.coach_id; > > You're close: > > select cuser.username as coach, auser.username as athlete > from athletes, coaches, coaching_relationships co_rel, > users cuser, users auser > where athletes.athlete_id = co_rel.athlete_id > and coaches.coach_id = co_rel.coach_id > and coaches.user_id = cuser.user_id > and athletes.user_id = auser.user_id > order by cuser.username, auser.username > > And some unsolicited advice: don't abbreviate table names which are less than > 10 characters. When you have to revisit these queries in 9 months, you won't > want to see all those "c" and "a" and "a1" tablename aliases. It's like > using programming variables named "x" and "y". > > -- > Josh Berkus > Aglio Database Solutions > San Francisco >