需要来自单个输出行上多行的数据。子查询?

Need data from multple rows on single output row. Subquery?

我对使用 MySQL 还很陌生,所以请原谅这个模糊的标题,我不确定如何提出这个问题,或者它是否确实需要子查询。 编辑:谢谢@O。 Jones 修改了标题。

我有 table 名员工,其结构如下:

CREATE TABLE Employees (
  employeeNumber INTEGER NOT NULL,
  lastName VARCHAR(50) NOT NULL,
  firstName VARCHAR(50) NOT NULL,
  extension VARCHAR(10) NOT NULL,
  email VARCHAR(100) NOT NULL,
  officeCode INTEGER NOT NULL,
  reportsTo INTEGER NULL,
  jobTitle VARCHAR(50) NOT NULL,
  PRIMARY KEY (employeeNumber),
  FOREIGN KEY (officeCode) references Offices(officeCode)
)ENGINE=innodb;

我正在尝试提出一个将列出 3 条数据的查询。 employeeNumber,与该号码相关的员工姓名 (CONCAT(e.firstName, ' ', e.lastName)),以及员工的 Manager,我们将其视为 reportsTo。我的问题是,reportsTo 只是另一个 employeeNumber,所以要将其变成一个实际名称,我认为我们需要 sub-query.

下面是数据集的示例:https://i.imgur.com/jXvLoL2.png

有人可以告诉我 sub-query 是否真的有必要,或者是否有更好的方法,并可能指出正确的方向来完成我的查询?这是我目前所拥有的:

SELECT
    e.employeeNumber as 'Employee Number',
    CONCAT(e.firstName, ' ', e.lastName) as 'Employee',
    # as 'Manager'
FROM Employees e;

使用加入

 SELECT e.employeeNumber as 'EmployeeNumber', CONCAT(e.firstName, ' ', e.lastName) as 'Employee', CONCAT(m.firstName, ' ', m.lastName) as 'Manager'
  FROM Employees e
  LEFT JOIN Employees m ON m.employeeNumber = e.reportsTo ;

您可以使用子查询,但使用 join 会更简单。

SELECT
    e.employeeNumber as 'Employee Number',
    CONCAT(e.firstName, ' ', e.lastName) as 'Employee',
    e.reportsTo as 'Manager Number',
    CONCAT(m.firstName, ' ', m.lastName) as 'Manager'
FROM Employees e LEFT JOIN Employees m
ON e.reportsTo=m.employeeNumber;

在这种情况下使用左连接,因为可能有一些员工没有向他们报告的任何经理,在这种情况下我们也想获取他们。