2015-04-17 49 views
0

我有两张表,员工记录(id,firstName,lastName)和违规(violatorId,supervisorId)。SQL查询拉同一个字段不同的值

我的查询提取了违规者和主管的列表。我宁愿不显示该人的身份证,显示他们的名字和姓氏。所以这是我的查询到目前为止...

SELECT 
emp.firstName as vFirstName, 
emp.lastName as vLastname, 
v.violatorId, 
v.supervisorId, 
emp.firstName as sFirstName, 
emp.lastName as sLastName 
FROM employee emp 
LEFT JOIN violator v 
ON violatorId = emp.id 

因此,这将返回第一个和最后一个名称信息,违反者,而不是管理者。示例输出:

Violator vFirstName vLastName Supervisor sFirstName sLastName 
1  Jon   Smith  20   Jon  Smith 

任何帮助将是巨大的

+0

是您的supervisorI引用Employee表吗? – Siyual

回答

3
SELECT 
    e1.firstName AS violatorFirstName, 
    e1.lastName AS violatorLastName, 
    e2.firstName AS supervisorFirstName, 
    e2.lastName AS supervisorLastName 
FROM violator v 
LEFT JOIN employee e1 ON v.violatorId = e1.id 
LEFT JOIN employee e2 ON v. supervisorId = e2.id 
+0

谢谢,那有效 – rafacardosoc

2

你需要参加一次以employee

SELECT emp.firstName AS vFirstName, emp.lastName AS vLastName, 
     v.violatorId AS vId, v.supervisorId AS sId, 
     s.firstName AS sFirstName, s.lastName AS sLastName 
FROM employee emp 
LEFT JOIN violator v ON v.violatorId = emp.id 
LEFT JOIN employee s ON v.supervisorId = s.id 
0

方法-1

SELECT 
    e1.violatorId AS violatorId , 
    e1.firstName AS violatorName, 
    e2.supervisorId AS supervisorId , 
    e2.firstName AS supervisorName 
FROM violator v 
LEFT JOIN employee e1 ON v.violatorId = e1.id 
LEFT JOIN employee e2 ON v. supervisorId = e2.id 

方法-2

SELECT 
    v.violatorId, 
    emp.firstName AS violatorName, 
    v.supervisorId, 
    (SELECT firstName FROM employee WHERE employee.id = v.supervisorId) AS supervisorName 
FROM 
    employee emp 
LEFT JOIN 
    violator v 
ON 
    violatorId = emp.id 
相关问题