我在使用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;
答案 0 :(得分: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 ;
答案 1 :(得分: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;
在这种情况下使用左连接,因为可能有一些员工没有向他们报告的任何经理,在这种情况下我们也想要获取它们。