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

问题描述 投票:2回答:2

我对使用MySQL很新,所以请原谅模糊的标题,我不知道如何提出这个问题,或者它是否真的需要子查询。编辑:谢谢@O。琼斯修改标题。

我有一张员工表,其结构如下:

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,所以要把它变成一个实际的名字,我相信我们需要一个子查询。

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

有人能告诉我实际上是否需要子查询,或者是否有更好的方法来执行此操作,并可能指出我正确的方向来完成我的查询?这是我到目前为止:

SELECT
    e.employeeNumber as 'Employee Number',
    CONCAT(e.firstName, ' ', e.lastName) as 'Employee',
    # as 'Manager'
FROM Employees e;
mysql sql join self-join
2个回答
3
投票

使用加入

 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 ;

2
投票

您可以使用子查询,但使用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;

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

© www.soinside.com 2019 - 2024. All rights reserved.