SQLで3つのテーブルをインナー結合するには?

3つのテーブルをビューで結合しようとしているのですが、以下のような状況です。

この大学のキャンパスに住むことを希望している学生の情報が入っているテーブルがあります。別のテーブルには、各学生のホールの好み(3つ)がリストアップされています。しかし、これらの希望はそれぞれ単なるID番号であり、ID番号は3番目のテーブルで対応するホール名を持っています(このデータベースを設計したわけではありません...)。

かなりの確率で、私は彼らの好みと彼らの情報を持つテーブルに INNER JOIN を行い、結果は次のようになります。

 John Doe | 923423 | Incoming Student | 005

ここで、005HallIDになります。このテーブルには HallIDHallName が含まれていますが、この HallID を 3 番目のテーブルにマッチさせたいと思います。

つまり、結果は次のようになります。

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

現在、私が持っているものは以下の通りです。

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
ソリューション

以下のようにすることができます(テーブルのフィールドなどについては推測です)。

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

複数のホールのリクエストに基づいて、このようにすることができます。各部屋のプレフィクスIDに対して、Hallテーブルを複数回結合するだけです。

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
解説 (4)

同じIDを持つ3つのテーブルを結合する場合は、次のようになると思います。

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

ただ、*をテーブルから取得したいものに置き換えるだけです。

解説 (0)

今持っている「ID番号」を3番目のテーブルの「ID番号」にリンクする2番目の内部結合が必要なだけです。その後、「ID番号」を「ホール名」に置き換えれば出来上がりですá :)

解説 (0)