¿Unión interna SQL con 3 tablas?
Estoy intentando unir 3 tablas en una vista; aquí está la situación:
Tengo una tabla que contiene información de los estudiantes que solicitan vivir en este campus universitario. Tengo otra tabla que enumera las Preferencias de Pasillo (3 de ellas) para cada Estudiante. Pero cada una de estas preferencias es simplemente un número de identificación, y el número de identificación tiene un nombre de sala correspondiente en una tercera tabla (no diseñé esta base de datos...).
Más o menos, tengo INNER JOIN
sobre la mesa sus preferencias, y su información, el resultado es algo así como...
John Doe | 923423 | Incoming Student | 005
¿ Dónde 005
estaría el HallID
. Ahora quiero hacer coincidir eso HallID
con una tercera tabla, donde esta tabla contiene a HallID
y HallName
.
Básicamente, quiero que mi resultado sea como...
John Doe | 923423 | Incoming Student | Foley Hall <---(INSTEAD OF 005)
Esto es lo que tengo 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
Puedes hacer lo siguiente (supuse en los campos de la tabla, 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
Según su solicitud de varias salas, puede hacerlo de esta manera. Simplemente te unes a tu mesa Hall varias veces para cada prefijo de habitación:
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
Si tienes 3 mesas iguales ID
para unir, creo que sería así:
SELECT * FROM table1 a
JOIN table2 b ON a.ID = b.ID
JOIN table3 c ON a.ID = c.ID
Simplemente reemplácelo *
con lo que desea obtener de las tablas.