SQL Inner-join 3 táblával?

I'm megpróbálom összekapcsolni 3 táblázatot egy nézetben; itt a helyzet:

Van egy táblázatom, amely a főiskolai kampuszra jelentkező hallgatók adatait tartalmazza: Van egy táblázatom, amely a főiskolai kampuszra jelentkező hallgatók adatait tartalmazza. Van egy másik táblázatom, amely az egyes hallgatók csarnokpreferenciáit (3 darabot) sorolja fel. De ezek a preferenciák mindegyike csupán egy azonosítószám, és az azonosítószámnak van egy megfelelő csarnoknév egy harmadik táblázatban (nem terveztem ezt az adatbázist...).

Nagyjából, van INNER JOIN a preferenciáikat tartalmazó táblán, és az információik, az eredmény valami ilyesmi...

 John Doe | 923423 | Incoming Student | 005

Ahol a 005 a HallID lenne. Tehát most ezt a HallID-t egy harmadik táblához akarom rendelni, ahol ez a tábla tartalmazza a HallID-t és a HallName-t.

Tehát nagyjából azt akarom, hogy az eredményem olyan legyen, mint...

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

Itt van, ami jelenleg van:

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
Megoldás

A következőket teheti meg (a táblázat mezőire tippeltem, stb.)

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

A több teremre vonatkozó kérésed alapján így is megteheted. Csak többször csatlakozol a csarnok tábládhoz minden egyes szoba pref id-hez:

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
Kommentárok (4)

Ha 3 azonos azonosítóval rendelkező tábla van, amelyeket össze kell kapcsolni, akkor szerintem ez így néz ki:

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

Csak helyettesítsd a *-t azzal, amit a táblákból szeretnél kapni.

Kommentárok (0)

Csak egy második belső csatlakozásra van szükséged, amely összekapcsolja a mostani "azonosítószámot" a harmadik tábla "azonosítószámával". Ezután cseréld ki az ID Number-t a Hall Name-re és voilá :)

Kommentárok (0)