根据mysql中的另一列从列中检索数据

时间:2013-09-26 14:26:47

标签: mysql sql database

我有一个名为Employee的表

| EmpID | Name | Department | Supervisor |
  • ID是主键,是一个整数。
  • 名称是一个字符串
  • 主管是指一名员工的整数。

我想列出其主管姓名旁边的所有员工。

 SELECT empid, name, supervisor
 FROM Employee;

给了我:

+-------+--------+------------+
| empid | name   | supervisor |
+-------+--------+------------+
|     1 | John   |       NULL |
|     2 | Roger  |       NULL |
|     3 | Pete   |       NULL |
|     4 | Rafael |       NULL |
|     5 | Rafael |          1 |
|     6 | Obama  |          1 |
|     7 | Karl   |          1 |
|     8 | Carl   |          1 |
|     9 | Moni   |          2 |
|    10 | Dave   |          9 |
|    11 | David  |          9 |
|    12 | Carl   |          9 |
|    13 | Linda  |       NULL |
|    14 | Maria  |       NULL |
|    15 | Monk   |          3 |
|    16 | Peter  |       NULL |
|    17 | Pete   |          4 |
|    18 | Marina |          4 |
|    19 | John   |          4 |
|    20 | Alvaro |          4 |
+-------+--------+------------+

我希望得到这个,但是在主管专栏中没有数字ID,我想要实际的名称,即数字ID。

我该怎么做?我想我需要一个花哨的嵌套查询,但我无法从mysql的文档中找出如何做到这一点

2 个答案:

答案 0 :(得分:0)


select Employee.id, Employee.name, Supervisor.name from Employee left join Supervisor on Employee.supervisor = Supervisor.id 

答案 1 :(得分:0)

您正在寻找JOIN

A JOIN允许您生成两个数据集的笛卡尔积,然后可以根据需要对其进行过滤。通常,您在外键或其他重要索引上连接表。在您的情况下,您希望将此表与empID-supervisor关系一起加入。方法如下:

SELECT e.id, e.name, s.name 
FROM Employee e LEFT JOIN Supervisor s ON e.supervisor = s.id

加入语法非常强大,需要一些时间才能正确掌握。为了更好地理解它并获得一个可靠的起点,我建议您阅读 OFFICIAL DOCUMENTATION