2013-04-18 4 views
1

나는 학생, 직원, 교통, 운송 테이블에 3 개의 테이블이 있으며, 교통편이 있으며 CandidateType 칼럼과 구별되는 학생과 직원의 기록이 있습니다. CandidateType = 0 레코드가 스태프 테이블에서 제공되어야하며 CandidateType=1 인 경우 레코드는 학생 테이블에서 가져와야합니다. 문제는 두 테이블의 조인 열이 같은 값을 갖는다는 것입니다. 아래 테이블 구조입니다.조건에 다른 테이블에 합류

|Staff Table| 
------------------------- 
Id | Name | Designation | 
------------------------- 
1 | ABC | Teacher  | 
2 | xyz | Clerk  | 
3 | DDD | Teacher  | 

Student Table 
Id | Name | Class | 
------------------- 
1 | Ali | 5th | 
2 | Khan | 6th | 
3 | Jan | 6th | 

Transport Table 
Id | CandidateId | Candiadate Type | VehicleId 
---------------------------------------------- 
1 | 1   | 0    | 1 
2 | 3   | 1    | 1 
3 | 2   | 1    | 1 

내가 직원 및 학생 표 모두에서 동일 VehicleId=1. transport에서 테이블 candidateIds에서 학생 및 직원의 레코드를 검색하려면, 차량 하나에 studentsstaff의 기록을 얻을하는 방법에 대해 설명합니다. 어떤 도움을 .....

답변

4
SELECT a.ID, 
     CASE WHEN CandidateType = 0 
      THEN b.Name 
      ELSE c.Name 
     END AS Name 
FROM Transport a 
     LEFT JOIN Staff b 
      ON a.CandidateID = b.ID 
     LEFT JOIN Student c 
      ON a.CandidateID = c.ID 
WHERE a.VehicleID = 1 

OUTPUT SQLFiddle에 대한

╔════╦══════╗ 
║ ID ║ NAME ║ 
╠════╬══════╣ 
║ 1 ║ ABC ║ 
║ 2 ║ Jan ║ 
║ 3 ║ Khan ║ 
╚════╩══════╝ 
+0

+1 :) –

0
select * 
from Transport tr 
left join 
     Staff stf 
on  stf.Id = tr.CandidateId 
     and tr.CandidateType = 0 
left join 
     Student stu 
on  stu.Id = tr.CandidateId 
     and tr.CandidateType = 1 
관련 문제