3 개의 테이블이있는 SQL 내부 조인?


330

뷰에서 3 개의 테이블을 조인하려고합니다. 상황은 다음과 같습니다.

이 대학 캠퍼스에 지원하기 위해 지원하는 학생들의 정보가 담긴 테이블이 있습니다. 각 학생의 홀 기본 설정 (3 개)을 나열한 다른 테이블이 있습니다. 그러나 이러한 각 환경 설정은 단순히 ID 번호이며 ID 번호는 세 번째 테이블에 해당 홀 이름이 있습니다 (이 데이터베이스를 설계하지 않았습니다 ...).

거의, 나는 INNER JOIN그들의 선호도와 정보로 테이블에 있습니다. 결과는 다음과 같습니다 ...

 John Doe | 923423 | Incoming Student | 005

어디 005있을 것 HallID입니다. 이제이 HallID테이블에 HallIDand 가 포함 된 세 번째 테이블 과 일치 시키려고합니다 HallName.

결과는 다음과 같습니다.

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

여기 내가 현재 가지고있는 것입니다 :

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

답변:


503

다음을 수행 할 수 있습니다 (테이블 필드 등을 추측했습니다)

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

여러 홀에 대한 귀하의 요청에 따라이 방법으로 할 수 있습니다. 각 회의실 준비에 대해 홀 테이블에 여러 번 참가하면됩니다.

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

1
이것은 하나의 환경 설정에서만 작동하지만 3 가지 환경 설정으로 작동하도록 어떻게 편집하고 싶습니까? (각 환경 설정에 대해 하나의 열)
Bob Sanders

1
@BobSanders가 방금 답변을 업데이트 한 다음 HallPref 번호를 원하지 않으면 해당 열을 삭제하십시오
Taryn

46
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

27
이 답변에는 OP가 원래 목표를 달성하는 방법을 보여주는 합리적인 설명이 없습니다.
gaige

41

같은 테이블을 가진 3 개의 테이블이 있다면 다음 ID과 같이 생각합니다.

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

*테이블에서 얻고 싶은 것으로 바꾸십시오 .


6
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

3

ID Number지금 가지고 있는 것을 ID Number세 번째 테이블과 연결하는 두 번째 내부 조인 만 있으면 됩니다. 그 후, 교체 ID Number에 의해 Hall Name봐라 :)


2
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;

2

많은 응답이 있었지만 전반적인 교훈은 where 절에서 여러 개의 JOINS를 사용할 수 있다는 것입니다. 또한 techonthenet.com (내 상사가 나에게 추천 했으므로 그것이 내가 찾은 방법입니다) 다른 질문이 있고 시도하고 알아 내고 싶다면 훌륭한 SQL 자습서가 있습니다.

SELECT table1.column1
FROM table1
WHERE table1 > 0 (or whatever you want to specify)
INNER JOIN table1 
ON table1.column1 = table2.column1

1

동일한 ID를 가진 조인 3 테이블에 대한 올바른 쿼리입니다 **

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';

직원 첫 테이블. 두 번째 테이블을보고하십시오. 출생 세 번째 테이블


1
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

1

이 쿼리는 당신을 위해 작동합니다

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

1
select products.product_id, product_name, price, created_at, image_name, categories.category_id, category_name,brands.brand_id, brand_name 
FROM products INNER JOIN categories USING (category_id) INNER JOIN brands USING(brand_id)

-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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.