在条件上加入不同的表

时间:2013-04-18 10:44:26

标签: sql sql-server tsql

我有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相同,如何获得第一辆车中studentsstaff的记录。 任何帮助.....

2 个答案:

答案 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