Tuesday, December 13, 2016

SQL Inner-join with 3 tables? stackoverflow

I'm trying to join 3 tables in a view; here is the situation:
I have a table that contains information of students who are applying to live on this College Campus. I have another table that lists the Hall Preferences (3 of them) for each Student. But each of these preferences are merely an ID Number, and the ID Number has a corresponding Hall Name in a third table (did not design this database...).
Pretty much, I have INNER JOIN on the table with their preferences, and their information, the result is something like...
 John Doe | 923423 | Incoming Student | 005
Where 005 would be the HallID. So Now I want to match that HallID to a third table, where this table contains a HallID and HallName.
So pretty much, I want my result to be like...
 John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)
EDIT here is what I currently Have
SELECT     s.StudentID, s.FName, s.LName, s.Gender, s.BirthDate, s.Email, r.HallPref1,   r.HallPref2, r.HallPref3
    FROM         dbo.StudentSignUp AS s INNER JOIN
                      RoomSignUp.dbo.Incoming_Applications_Current AS r ON s.StudentID = r.StudentID INNER JOIN
                      HallData.dbo.Halls AS h ON r.HallPref1 = h.HallID
shareimprove this question
10 
You just need a second inner join... it would be simpler to help you if you'd show the SQL you've already got. – Jon Skeet Apr 17 '12 at 16:47
5 
when jon skeet comments you upvote, read and then understand :) – Swapnil Apr 8 at 11:15

7 Answers

up vote217down voteaccepted
You can do the following (I guessed on table fields,etc)
SELECT s.studentname
    , s.studentid
    , s.studentdesc
    , h.hallname
FROM students s
INNER JOIN hallprefs hp
    on s.studentid = hp.studentid
INNER JOIN halls h
    on hp.hallid = h.hallid
EDIT:
Based on your request for multiple halls you could do it this way. You just join on your Hall table multiple times for each room pref id:
SELECT     s.StudentID
    , s.FName
    , s.LName
    , s.Gender
    , s.BirthDate
    , s.Email
    , r.HallPref1
    , h1.hallName as Pref1HallName
    , r.HallPref2 
    , h2.hallName as Pref2HallName
    , r.HallPref3
    , h3.hallName as Pref3HallName
FROM  dbo.StudentSignUp AS s 
INNER JOIN RoomSignUp.dbo.Incoming_Applications_Current AS r 
    ON s.StudentID = r.StudentID 
INNER JOIN HallData.dbo.Halls AS h1 
    ON r.HallPref1 = h1.HallID
INNER JOIN HallData.dbo.Halls AS h2
    ON r.HallPref2 = h2.HallID
INNER JOIN HallData.dbo.Halls AS h3
    ON r.HallPref3 = h3.HallID

No comments:

Post a Comment