SQL vidinis sujungimas su 3 lentelėmis?

Bandau sujungti 3 lenteles į rodinį; štai tokia situacija:

Turiu lentelę, kurioje pateikiama informacija apie studentus, kurie kreipiasi dėl gyvenimo koledžo miestelyje. Turiu kitą lentelę, kurioje išvardyti kiekvieno studento pageidavimai dėl salės (3 iš jų). Tačiau kiekvienas iš šių pageidavimų yra tik ID numeris, o ID numeris turi atitinkamą salės pavadinimą trečioje lentelėje (šios duomenų bazės neplanavau...).

Daugmaž, aš turiu INNER JOIN ant lentelės su jų pageidavimais ir jų informacija, rezultatas yra kažkas panašaus į...

 John Doe | 923423 | Incoming Student | 005

Kur 005 būtų HallID. Taigi dabar noriu tą HallID priderinti prie trečios lentelės, kurioje yra HallID ir HallName.

Taigi iš esmės noriu, kad mano rezultatas būtų toks...

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

Štai ką šiuo metu turiu:

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
Sprendimas

Galite atlikti šiuos veiksmus (aš spėjau, kad lentelės laukai ir t. t.)

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

Remdamiesi jūsų užklausa dėl kelių salių, galite tai padaryti taip. Tiesiog prisijungsite prie savo Hall lentelės kelis kartus kiekvienam salės pref 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
Komentarai (4)

Jei turite 3 lenteles su tuo pačiu ID, kurias reikia sujungti, manau, kad būtų taip:

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

Tiesiog pakeiskite * į tai, ką norite gauti iš lentelių.

Komentarai (0)

Jums reikia tik antrojo vidinio sujungimo, kuris susietų dabar turimą ID numerį su trečiosios lentelės ID numeriu. Vėliau pakeiskite ID numerį į Hall Name ir voilá :)

Komentarai (0)