SQL Inner-join con 3 tabelle?

Sto cercando di unire 3 tabelle in una vista; ecco la situazione:

Ho una tabella che contiene le informazioni degli studenti che stanno facendo domanda per vivere in questo campus universitario. Ho un'altra tabella che elenca le preferenze di Hall (3 di loro) per ogni studente. Ma ognuna di queste preferenze è semplicemente un Numero ID, e il Numero ID ha un corrispondente Nome della Hall in una terza tabella (non ho progettato questo database...).

Più o meno, ho INNER JOIN sulla tabella con le loro preferenze, e le loro informazioni, il risultato è qualcosa come...

 John Doe | 923423 | Incoming Student | 005

Dove 005 sarebbe il HallID. Quindi ora voglio abbinare quel HallID a una terza tabella, dove questa tabella contiene un HallID e un HallName.

Quindi, più o meno, voglio che il mio risultato sia come...

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

Ecco quello che ho attualmente:

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
Soluzione

Puoi fare quanto segue (ho indovinato sui campi della tabella, ecc.)

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

In base alla tua richiesta di sale multiple potresti farlo in questo modo. Devi solo unirti alla tua tabella Hall più volte per ogni id di camera pref:

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
Commentari (4)

Se hai 3 tabelle con lo stesso ID da unire, penso che sarebbe così:

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

Basta sostituire * con quello che vuoi ottenere dalle tabelle.

Commentari (0)

Hai solo bisogno di un secondo join interno che colleghi il ID Number che hai ora al ID Number della terza tabella. In seguito, sostituisci il ID Number con il Hall Name e voilàá :)

Commentari (0)