SQL内连接有3个表吗?

Bob*_*ers 308 sql join inner-join

我想在一个视图中加入3个表; 这是情况:

我有一张表格,其中包含申请在大学校园内生活的学生的信息.我有另一张桌子,列出了每个学生的霍尔偏好(其中3个).但是这些首选项中的每一个仅仅是一个ID号,并且ID号在第三个表中具有相应的Hall Name(没有设计该数据库......).

差不多,我INNER JOIN在桌子上有他们的偏好和他们的信息,结果是......

 John Doe | 923423 | Incoming Student | 005
Run Code Online (Sandbox Code Playgroud)

哪个005会是HallID.所以现在我想将它HallID与第三个表匹配,其中该表包含一个HallIDHallName.

所以,我希望我的结果像......

 John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)
Run Code Online (Sandbox Code Playgroud)

这是我目前拥有的:

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
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 470

您可以执行以下操作(我猜对于表字段等)

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
Run Code Online (Sandbox Code Playgroud)

根据您对多个大厅的要求,您可以这样做.您只需多次加入您的霍尔表,每个房间的首选项:

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
Run Code Online (Sandbox Code Playgroud)


小智 44

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
Run Code Online (Sandbox Code Playgroud)

  • 这个答案缺乏合理的解释来向OP展示如何实现原始目标. (24认同)

aqu*_*ent 38

如果你有3个相同的表ID加入,我想它会是这样的:

SELECT * FROM table1 a
JOIN table2 b ON a.ID = b.ID
JOIN table3 c ON a.ID = c.ID
Run Code Online (Sandbox Code Playgroud)

只需替换*您想从表中获得的内容即可.


小智 6

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
Run Code Online (Sandbox Code Playgroud)