SQL Inner-join med 3 tabeller?

Jeg forsøger at sammenføje 3 tabeller i en visning; her er situationen:

Jeg har en tabel, der indeholder oplysninger om studerende, der ansøger om at bo på dette College Campus. Jeg har en anden tabel, der viser Hall Preferences (3 af dem) for hver studerende. Men hver af disse præferencer er blot et ID-nummer, og ID-nummeret har et tilsvarende hallnavn i en tredje tabel (har ikke designet denne database...).

Jeg har stort set INNER JOIN på tabellen med deres præferencer, og deres oplysninger, resultatet er noget i stil med...

 John Doe | 923423 | Incoming Student | 005

Hvor 005 ville være HallID. Så nu vil jeg matche dette HallID med en tredje tabel, hvor denne tabel indeholder et HallID og HallName.

Så jeg ønsker, at mit resultat skal se ud som...

 John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)

Her er hvad jeg har i øjeblikket:

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
Løsning

Du kan gøre følgende (jeg gættede på tabelfelter osv.)

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

Baseret på din anmodning om flere haller kunne du gøre det på denne måde. Du skal bare deltage på din Hall tabel flere gange for hvert rum 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
Kommentarer (4)

Hvis du har 3 tabeller med samme ID, der skal sammenføjes, tror jeg, at det vil være sådan her:

SELECT * FROM table1 a
JOIN table2 b ON a.ID = b.ID
JOIN table3 c ON a.ID = c.ID

Du skal blot erstatte * med det, du vil have fra tabellerne.

Kommentarer (0)

Du skal bare have et andet indre led, der forbinder det ID-nummer, du har nu, med ID-nummer i den tredje tabel. Herefter erstatter du ID Number med Hall Name og voilá :)

Kommentarer (0)