我有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
表中,候选人员和学生表中的候选人ID相同,如何获得第一辆车中students
和staff
的记录。
任何帮助.....
答案 0 :(得分: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
输出
╔════╦══════╗
║ ID ║ NAME ║
╠════╬══════╣
║ 1 ║ ABC ║
║ 2 ║ Jan ║
║ 3 ║ Khan ║
╚════╩══════╝
答案 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