使用最近获取的ID从同一行检索名称

时间:2015-11-14 05:08:42

标签: sql

我在搞乱,想知道(标题)。让我解释一下。

假设我有一个Employee表,该表中的ID ManagerID and Name ID。因此,在查询找到每个人的经理之后,你会得到这样的结果

Person's Name | Their ID | Manager ID

现在他是我想知道的,如果可能的话。经理也在这个员工表中,他们要么有其他员工作为他们的经理,要么他们没有经理。从技术上讲,我掌握了我需要的所有信息。只需要将int(ManagerID)与同一行中的Person名称进行交换。

这是可能的还是SQL无法处理这种交换。

编辑: 所以这是我一直在使用的测试表和值:

Create table Employee
(   ID int,
    Name varchar (50), 
    ManagerID int );

Insert into Employee
Values( 101, 'Joe Smoeington', 102);

Insert into Employee
Values( 102, 'This Guy', 106);

Insert into Employee
Values(103, 'Test', 102);

Insert into Employee
Values(104, 'Rob', 105);

Insert into Employee
Values(105 , 'Jeremy', NULL);

Insert into Employee
Values(106 , 'Sam', NULL);

我的困难点: 选择ID,名称,ManagerID 来自员工 其中ManagerID不是NULL

最终,这将为您提供一个如下表格:

ID      Name       ManagerID
101 Joe Smoeington  102
102 This Guy        106
103 Test            102
104 Rob             105

我尝试过的事情:

Select ID, Name, ManagerID
From Employee Join Employee
On Employee.ID = Employee.ManagerID
Where ManagerID IS NOT NULL

Select ID, Name, (Select Name From Employee Where (didnt know what to put here and gave up on this attempt)
From Employee
Where ManagerID IS NOT NULL

还有其他人不值得一提

1 个答案:

答案 0 :(得分:1)

您可以使用自我加入这样的内容。

 SELECT T1.Name AS Employee_Name,T1.ID AS Employee_ID,(IFNULL(T2.ID,'NA')) AS ManagerID
    FROM
    employee T1
    LEFT JOIN employee T2 ON T1.ManagerID = T2.ID

编辑:    如果您只想看到那些有经理的员工。

 SELECT T1.Name AS Employee_Name,T1.ID AS Employee_ID,(IFNULL(T2.ID,'NA')) AS ManagerID
            FROM
            employee T1
            INNER JOIN employee T2 ON T1.ManagerID = T2.ID

以下是DEMO

希望这有助于。