从另一列中选择名称,并加入另一个表

时间:2015-02-12 18:15:02

标签: mysql

嗯,这是我能想到的最简单的标题。

所以这是我的问题。我有两个表(例如数据): 表:

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
你能帮帮我吗?我真的没有想法......

2 个答案:

答案 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上查看。