所以这是我的问题。我有两个表(例如数据): 表:
EMPLOYEES
=====================================================
ID NAME SUPERVISOR LOCATION SALARY
-----------------------------------------------------
34 John AL 100000
17 Mike 34 PN 75000
5 Alan 34 LE 25000
10 Dave 5 NY 20000
第二个表格(例如数据):
BONUS
========================================
ID Bonus
----------------------------------------
17 5000
34 5000
10 2000
我必须选择员工的姓名,主管的名字和奖金,每个人的奖金大于1000.所以我写了这个查询:
SELECT e.name, e.supervisor, b.bonus from employees e join bonus as b on b.empid = e.empid where b.bonus > 1000
但我不知道如何用名称替换主管ID以获得此结果:
RESULT:
=====================================
Name Supervisor Bonus
-------------------------------------
Dave Alan 2000
John - 5000
Mike John 5000
你能帮帮我吗?我真的没有想法......
答案 0 :(得分:1)
你必须加入表格:
SELECT e.NAME as EmployeeName, s.NAME as SupervisorName FROM EMPLOYEES e join EMPLOYEES s ON e.SUPERVISOR = s.ID
这将为您提供员工和主管。从那里开始让员工达到您的标准。
答案 1 :(得分:1)
你需要第二次加入employees
牌桌;您可以使用别名来区分对同一个表的两个引用:
SELECT e.name, s.name AS supervisor, b.bonus
FROM employees AS e
JOIN bonus AS b USING (empid)
LEFT JOIN employees AS s ON s.empid = e.supervisor
WHERE b.bonus > 1000
在sqlfiddle上查看。
需要LEFT JOIN
,因为您还希望包括没有主管的员工(例如John)。有关详细信息,请参阅A Visual Explanation of SQL Joins。
另一种效率较低(但有时更容易理解)的方法是使用相关子查询:
SELECT e.name, (SELECT name FROM employees WHERE empid=e.supervisor), b.bonus
FROM employees AS e
JOIN bonus AS b USING (empid)
WHERE b.bonus > 1000
在sqlfiddle上查看。