2012-04-17 18 views
209

Próbuję dołączyć 3 tabele w widoku; tutaj jest sytuacja:SQL Inner-join z 3 tabelami?

Mam tabelę, która zawiera informacje o studentach, którzy starają się żyć w tym College Campus. Mam kolejną tabelę, która zawiera Preferencje Hall (3 z nich) dla każdego Studenta. Ale każda z tych preferencji jest jedynie numerem identyfikacyjnym, a numer identyfikacyjny ma odpowiednią nazwę Hall w trzeciej tabeli (nie zaprojektował tej bazy danych ...).

Dość dużo, mam INNER JOIN na stole ze swoimi preferencjami, a ich informacje, wynik jest coś takiego jak ...

John Doe | 923423 | Incoming Student | 005 

przypadku 005 byłby HallID. Więc teraz chcę dopasować ten HallID do trzeciej tabeli, gdzie ta tabela zawiera HallID i HallName.

Więc dość dużo, chcę mój wynik będzie podobny ...

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

EDIT tutaj jest to, co obecnie mam

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

Wystarczy druga wewnętrzna przyłączyć ... byłoby prostsze do pomocy, jeśli pokazałeś już SQL, który już masz. –

Odpowiedz

340

można wykonać następujące czynności (domyśliłem się na polach tabeli, itp)

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:

Na podstawie wniosku o wielu salach możesz to zrobić w ten sposób. Wystarczy przyłączyć na stole Hall wielokrotnie za każdym pokoju 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 
+0

Działa to tylko z jedną preferencją, ale jak chciałbym ją edytować, aby działała z 3 preferencjami?(jedna kolumna dla każdej preferencji) –

+0

@BobSanders właśnie zaktualizował moją odpowiedź, a jeśli nie chcesz, aby numer HallPref po prostu upuść te kolumny – Taryn

+0

To zadziałało idealnie! Dzięki dużo bluefeet! –

20

Jeśli masz 3 tabel z taka sama ID do dołączenia, myślę, że byłoby tak:

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

Wystarczy zastąpić * tym, co chcesz uzyskać z tabel.

1

Potrzebujesz tylko drugiego wewnętrznego połączenia, które łączy ID Number, które masz teraz z ID Number trzeciej tabeli. Następnie wymień ID Number przez Hall Name i voila :)

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

W tej odpowiedzi brakuje rozsądnego wytłumaczenia, aby pokazać OP, jak osiągnąć pierwotne cele. – gaige

0

Jest to poprawne zapytanie do przyłączenia 3 Spis z samym 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'; 

pracownik pierwszej tablicy. zgłosić drugą tabelę. narodziny trzeci stół

-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

To zapytanie będzie pracować dla Ciebie

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 
Powiązane problemy