SQL Inner-Join mit 3 Tabellen?

I'm versuchen, 3 Tabellen in einer Ansicht zu verbinden; hier ist die Situation:

Ich habe eine Tabelle, die Informationen über Studenten enthält, die sich für einen Wohnheimplatz an diesem College Campus bewerben. Ich habe eine weitere Tabelle, die die Wohnheimpräferenzen (3 Stück) für jeden Studenten auflistet. Aber jede dieser Präferenzen ist nur eine ID-Nummer, und die ID-Nummer hat einen entsprechenden Hallennamen in einer dritten Tabelle (ich habe diese Datenbank nicht entworfen...).

Ziemlich genau, ich habe INNER JOIN auf der Tabelle mit ihren Präferenzen, und ihre Informationen, das Ergebnis ist etwas wie...

 John Doe | 923423 | Incoming Student | 005

Wobei 005 die HallID wäre. Nun möchte ich diese "HallID" mit einer dritten Tabelle abgleichen, wobei diese Tabelle eine "HallID" und einen "Hallennamen" enthält.

Ich möchte also, dass mein Ergebnis ungefähr so aussieht...

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

Hier ist, was ich derzeit habe:

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ösung

Sie können Folgendes tun (ich habe auf Tabellenfelder etc. getippt)

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

Basierend auf Ihrer Anfrage nach mehreren Hallen könnten Sie es so machen. Verknüpfen Sie einfach Ihre Tabelle "Hall" mehrmals für jede Raumvorgaben-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
Kommentare (4)

Wenn Sie 3 Tabellen mit der gleichen "ID" haben, die verbunden werden sollen, würde es folgendermaßen aussehen:

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

Ersetzen Sie einfach * mit dem, was Sie aus den Tabellen erhalten möchten.

Kommentare (0)

Sie brauchen nur eine zweite innere Verknüpfung, die die "ID-Nummer", die Sie jetzt haben, mit der "ID-Nummer" der dritten Tabelle verbindet. Anschließend ersetzen Sie die "ID-Nummer" durch den "Hallennamen" und voilà :)

Kommentare (0)