¿Unión interna SQL con 3 tablas?

Resuelto Bob Sanders asked hace 12 años • 12 respuestas

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 JOINsobre la mesa sus preferencias, y su información, el resultado es algo así como...

 John Doe | 923423 | Incoming Student | 005

¿ Dónde 005estaría el HallID. Ahora quiero hacer coincidir eso HallIDcon una tercera tabla, donde esta tabla contiene a HallIDy 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
Bob Sanders avatar Apr 17 '12 23:04 Bob Sanders
Aceptado

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
Taryn avatar Apr 17 '2012 16:04 Taryn

Si tienes 3 mesas iguales IDpara 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.

aquatorrent avatar Apr 17 '2012 16:04 aquatorrent