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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要单个输出行上多行的数据。子查询?相关的知识,希望对你有一定的参考价值。

我对使用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;
答案

使用加入

 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;

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

以上是关于需要单个输出行上多行的数据。子查询?的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01427: 单行子查询在显示输出时返回多行

SQL相关子查询与非相关子查询

嵌套套娃,MySQL子查询,单行与多行子查询,相关和不相关(关联)子查询,完整详细可收藏

如何从单个 JSON(IOT HUB)将流分析输出转换为多行

Oracle 单行子查询在使用嵌套子查询时返回多行

如何从左表返回行,其中右表的条件在没有子查询的所有行上为真