I'estou tentando juntar 3 mesas em uma vista; aqui está a situação:
Tenho uma tabela que contém informações dos alunos que estão se candidatando para morar neste Campus Universitário. Tenho outra mesa que lista as Preferências de Salão (3 delas) para cada aluno. Mas cada uma dessas preferências é apenas um Número de Identificação, e o Número de Identificação tem um Nome de Hall correspondente em uma terceira tabela (não desenhei esse banco de dados...).
Praticamente, eu tenho INNER JOIN
na mesa com suas preferências, e suas informações, o resultado é algo como...
John Doe | 923423 | Incoming Student | 005
Onde 005
seria o HallID
. Agora eu quero comparar esse HallID
com uma terceira tabela, onde essa tabela contém um HallID
e um HallName
.
Por isso, quero que o meu resultado seja como...
John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)
Aqui está o que eu tenho actualmente:
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
Você pode fazer o seguinte (eu adivinhei em campos de mesa, etc.)
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
Com base no seu pedido de múltiplos corredores, você poderia fazer isso desta maneira. Você só se junta na sua mesa de Hall várias vezes para cada sala prefira a identificação:
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
Se você tem 3 mesas com o mesmo ID
para se juntar, eu acho que seria assim:
SELECT * FROM table1 a
JOIN table2 b ON a.ID = b.ID
JOIN table3 c ON a.ID = c.ID
Basta substituir `*' pelo que você quer obter das mesas.