2012-04-17 18 views
209

Estoy intentando unir 3 tablas en una vista; aquí está la situación:SQL ¿Combinación interna con 3 tablas?

Tengo una tabla que contiene información de los estudiantes que se postulan para vivir en este campus universitario. Tengo otra tabla que enumera las Preferencias del Salón (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 en la mesa con sus preferencias, y su información, el resultado es algo así como ...

John Doe | 923423 | Incoming Student | 005 

Dónde 005 sería el HallID. Así que ahora quiero hacer coincidir ese HallID con una tercera tabla, donde esta tabla contiene un HallID y HallName.

Así que más o menos, yo quiero que mi resultado sea como ...

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

EDITAR aquí es lo que actualmente tiene

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 
+20

Sólo se necesita unirse a un segundo interno ... que sería más sencillo para ayudarle si mostrarías el SQL que ya tienes. –

Respuesta

340

Puede hacer lo siguiente (supuse en 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 

EDIT:

Sobre la base de su solicitud de múltiples salas podrías hacerlo de esta manera. Que acaba de unirse en su mesa de la sala varias veces para cada habitación Identificación del pref:

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 
+0

Esto funciona con solo una preferencia, pero ¿cómo quisiera editar esto para que funcione con 3 preferencias?(Una columna para cada preferencia) –

+0

@BobSanders acaba de actualizar mi respuesta, luego, si no desea el número de HallPref, simplemente suelte esas columnas – Taryn

+0

¡Eso funcionó a la perfección! Muchas gracias Pies Azules! –

20

Si usted tiene 3 tablas con el mismo ID para unirse, 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 reemplace * con lo que quiere obtener de las tablas.

1

Solo necesita una segunda unión interna que vincule el ID Number que tiene ahora al ID Number de la tercera tabla. A continuación, reemplace el ID Number por el Hall Name y listo :)

28
SELECT column_Name1,column_name2,...... 
    From tbl_name1,tbl_name2,tbl_name3 
    where tbl_name1.column_name = tbl_name2.column_name 
    and tbl_name2.column_name = tbl_name3.column_name 
+11

Esta respuesta carece de una explicación razonable para mostrar al OP cómo lograr los objetivos originales. – gaige

0

Ésta es la consulta correcta para unirse a 3 mesa con el mismo id **

select a.empname,a.empsalary,b.workstatus,b.bonus,c.dateofbirth from employee a, Report b,birth c where a.empid=b.empid and a.empid=c.empid and b.empid='103'; 

empleado primera tabla. informe segunda tabla. nacimiento tercera tabla

-5
select empid,empname,managename,[Management ],cityname 
from employees inner join Managment 
on employees.manageid = Managment.ManageId  
inner join CITY on employees.Cityid=CITY.CityId 


id name managename managment cityname 
---------------------------------------- 
1 islam hamza  it  cairo 
3
SELECT table1.col,table2.col,table3.col 
FROM table1 
INNER JOIN 
(table2 INNER JOIN table3 
ON table3.id=table2.id) 
ON table1.id(f-key)=table2.id 
AND //add any additional filters HERE 
0
SELECT * 
FROM 
    PersonAddress a, 
    Person b, 
    PersonAdmin c 
WHERE a.addressid LIKE '97%' 
    AND b.lastname LIKE 'test%' 
    AND b.genderid IS NOT NULL 
    AND a.partyid = c.partyid 
    AND b.partyid = c.partyid; 
0
SELECT 
A.P_NAME AS [INDIVIDUAL NAME],B.F_DETAIL AS [INDIVIDUAL FEATURE],C.PL_PLACE AS [INDIVIDUAL LOCATION] 
FROM 
[dbo].[PEOPLE] A 
INNER JOIN 
[dbo].[FEATURE] B ON A.P_FEATURE = B.F_ID 
INNER JOIN 
[dbo].[PEOPLE_LOCATION] C ON A.P_LOCATION = C.PL_ID 
0

Esta consulta funciona para usted

Select b.id as 'id', u.id as 'freelancer_id', u.name as 
'free_lancer_name', p.user_id as 'project_owner', b.price as 
'bid_price', b.number_of_days as 'days' from User u, Project p, Bid b 
where b.user_id = u.id and b.project_id = p.id 
Cuestiones relacionadas