381 Stimmen

SQL Inner-Join mit 3 Tabellen?

Ich versuche, 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 ein Leben auf dem Campus dieses Colleges 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 viel, ich habe INNER JOIN mit ihren Präferenzen und Informationen auf den Tisch legen, ist das Ergebnis etwa so...

 John Doe | 923423 | Incoming Student | 005

Wo 005 wäre die HallID . Jetzt möchte ich das anpassen HallID in eine dritte Tabelle, wobei diese Tabelle eine HallID y HallName .

Ich möchte also, dass mein Ergebnis in etwa 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

559voto

Taryn Punkte 233818

Sie können Folgendes tun (ich habe auf Tabellenfelder usw. 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

Ausgehend von Ihrer Anfrage nach mehreren Hallen könnten Sie es so machen. Sie verknüpfen einfach Ihre Hallentabelle mehrfach für jede Zimmervoreinstellung:

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

62voto

aquatorrent Punkte 801

Wenn Sie 3 Tabellen mit demselben ID zu verbinden, würde es wohl so aussehen:

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

Einfach ersetzen * mit dem, was Sie aus den Tabellen herausholen wollen.

48voto

Lomorng Punkte 521
SELECT column_Name1,column_name2,......
  From tbl_name1,tbl_name2,tbl_name3
  where tbl_name1.column_name = tbl_name2.column_name 
  and tbl_name2.column_name = tbl_name3.column_name

7voto

SELECT table1.col,table2.col,table3.col 
FROM table1 
INNER JOIN 
(table2 INNER JOIN table3 
ON table3.id=table2.id) 
ON table1.id(f-key)=table2.id
AND //add any additional filters HERE

3voto

aF. Punkte 62254

Sie benötigen lediglich eine zweite innere Verknüpfung, die die ID Number die Sie jetzt haben, zum ID Number der dritten Tabelle. Ersetzen Sie anschließend die ID Number durch die Hall Name und voilà :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X