分配了管理器id的SQL查询empid需要将管理器id替换为名称

分配了管理器id的SQL查询empid需要将管理器id替换为名称,sql,Sql,我有一个表,其中包含分配了manager id的empid,其中任何一个拥有managerid的empid都需要将manage id替换为manager name 表结构如下所示 EMPID MANAGERID EMPNAME MANAGERNAME 001 NULL ABC NULL 002 001 DEF 001 需要如下输出 EMPID MANAGERID EMPNAME MANAGERNAME 001 NULL ABC

我有一个表,其中包含分配了manager id的
empid
,其中任何一个拥有managerid的empid都需要将manage id替换为manager name

表结构如下所示

EMPID MANAGERID EMPNAME MANAGERNAME
001   NULL      ABC     NULL
002  001        DEF       001
需要如下输出

EMPID MANAGERID EMPNAME   MANAGERNAME
001   NULL      ABC       NULL
002   001        DEF       ABC

如果管理器名称在同一个表中:

select t1.empID, t1.Name, t2.Name as Manager from table t1, table t2   
where t1.empID=t2.ManagerID
或者试试这个

select t1.EMPID, t1.MANAGERID, t1.EMPNAME, t2.EMPNAME as Manager from testTable11 t1 
left join testTable11 t2 on t1.MANAGERID=t2.EMPID

如果管理器名称在同一个表中:

select t1.empID, t1.Name, t2.Name as Manager from table t1, table t2   
where t1.empID=t2.ManagerID
或者试试这个

select t1.EMPID, t1.MANAGERID, t1.EMPNAME, t2.EMPNAME as Manager from testTable11 t1 
left join testTable11 t2 on t1.MANAGERID=t2.EMPID

如果管理器名称在同一个表中:

select t1.empID, t1.Name, t2.Name as Manager from table t1, table t2   
where t1.empID=t2.ManagerID
或者试试这个

select t1.EMPID, t1.MANAGERID, t1.EMPNAME, t2.EMPNAME as Manager from testTable11 t1 
left join testTable11 t2 on t1.MANAGERID=t2.EMPID

如果管理器名称在同一个表中:

select t1.empID, t1.Name, t2.Name as Manager from table t1, table t2   
where t1.empID=t2.ManagerID
或者试试这个

select t1.EMPID, t1.MANAGERID, t1.EMPNAME, t2.EMPNAME as Manager from testTable11 t1 
left join testTable11 t2 on t1.MANAGERID=t2.EMPID

由于您没有共享表结构,因此我不得不为您的问题假设它。考虑下表结构:-

CREATE TABLE employee(emp_id varchar(5) NOT NULL,  
emp_name varchar(20) NULL,  
dt_of_join date NULL,  
emp_manager_id varchar(5) NULL,  
CONSTRAINT emp_id PRIMARY KEY(emp_id) ,  
CONSTRAINT emp_manager_id FOREIGN KEY(emp_manager_id) REFERENCES employee(emp_id));  
在这种情况下,您可以使用以下查询以经理的姓名列出员工:-

SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
b.emp_name AS "Manager Name"  
FROM employee a, employee b  
WHERE a.emp_manager_id = b.emp_id; 
注意:这里假设所有员工都有与其记录关联的经理id

更新

根据您的评论,请尝试下面的查询

 SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
    a.emp_manager_id AS "Manager Id",
    b.emp_name AS "Manager Name"  
    FROM employee a LEFT JOIN employee b  ON a.emp_manager_id = b.emp_id;

由于您没有共享表结构,因此我不得不为您的问题假设它。考虑下表结构:-

CREATE TABLE employee(emp_id varchar(5) NOT NULL,  
emp_name varchar(20) NULL,  
dt_of_join date NULL,  
emp_manager_id varchar(5) NULL,  
CONSTRAINT emp_id PRIMARY KEY(emp_id) ,  
CONSTRAINT emp_manager_id FOREIGN KEY(emp_manager_id) REFERENCES employee(emp_id));  
在这种情况下,您可以使用以下查询以经理的姓名列出员工:-

SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
b.emp_name AS "Manager Name"  
FROM employee a, employee b  
WHERE a.emp_manager_id = b.emp_id; 
注意:这里假设所有员工都有与其记录关联的经理id

更新

根据您的评论,请尝试下面的查询

 SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
    a.emp_manager_id AS "Manager Id",
    b.emp_name AS "Manager Name"  
    FROM employee a LEFT JOIN employee b  ON a.emp_manager_id = b.emp_id;

由于您没有共享表结构,因此我不得不为您的问题假设它。考虑下表结构:-

CREATE TABLE employee(emp_id varchar(5) NOT NULL,  
emp_name varchar(20) NULL,  
dt_of_join date NULL,  
emp_manager_id varchar(5) NULL,  
CONSTRAINT emp_id PRIMARY KEY(emp_id) ,  
CONSTRAINT emp_manager_id FOREIGN KEY(emp_manager_id) REFERENCES employee(emp_id));  
在这种情况下,您可以使用以下查询以经理的姓名列出员工:-

SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
b.emp_name AS "Manager Name"  
FROM employee a, employee b  
WHERE a.emp_manager_id = b.emp_id; 
注意:这里假设所有员工都有与其记录关联的经理id

更新

根据您的评论,请尝试下面的查询

 SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
    a.emp_manager_id AS "Manager Id",
    b.emp_name AS "Manager Name"  
    FROM employee a LEFT JOIN employee b  ON a.emp_manager_id = b.emp_id;

由于您没有共享表结构,因此我不得不为您的问题假设它。考虑下表结构:-

CREATE TABLE employee(emp_id varchar(5) NOT NULL,  
emp_name varchar(20) NULL,  
dt_of_join date NULL,  
emp_manager_id varchar(5) NULL,  
CONSTRAINT emp_id PRIMARY KEY(emp_id) ,  
CONSTRAINT emp_manager_id FOREIGN KEY(emp_manager_id) REFERENCES employee(emp_id));  
在这种情况下,您可以使用以下查询以经理的姓名列出员工:-

SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
b.emp_name AS "Manager Name"  
FROM employee a, employee b  
WHERE a.emp_manager_id = b.emp_id; 
注意:这里假设所有员工都有与其记录关联的经理id

更新

根据您的评论,请尝试下面的查询

 SELECT a.emp_id AS "Emp_ID",a.emp_name AS "Employee Name",  
    a.emp_manager_id AS "Manager Id",
    b.emp_name AS "Manager Name"  
    FROM employee a LEFT JOIN employee b  ON a.emp_manager_id = b.emp_id;
您需要在同一个表上进行自(外部)联接:

select e.empid, 
       e.empname, 
       e.managerid, 
       mgr.empname as managername
from employee e
  left join employee mgr on e.managerid = mgr.empid;
您需要在同一个表上进行自(外部)联接:

select e.empid, 
       e.empname, 
       e.managerid, 
       mgr.empname as managername
from employee e
  left join employee mgr on e.managerid = mgr.empid;
您需要在同一个表上进行自(外部)联接:

select e.empid, 
       e.empname, 
       e.managerid, 
       mgr.empname as managername
from employee e
  left join employee mgr on e.managerid = mgr.empid;
您需要在同一个表上进行自(外部)联接:

select e.empid, 
       e.empname, 
       e.managerid, 
       mgr.empname as managername
from employee e
  left join employee mgr on e.managerid = mgr.empid;



您使用的是哪种数据库管理系统?博士后?甲骨文?@a_horse_与_no_name_数据库管理系统如何影响这种情况?(只是好奇)即使这样做了,也必须使用一个通用的解决方案(如果可能的话),这样我们就可以在不重写查询的情况下更改基础DBMS。@Amit:在这种情况下,DBMS dos很可能无关紧要。但了解DBMS通常有助于提供更好的答案。这个问题实际上没有包含足够的信息,例如
dfc
来自哪里?或者这是一种可能需要递归查询的层次结构(依赖于DBMS)?或者“replace”是否意味着需要一些字符串替换,这同样依赖于DBMS。@我明白你的意思。谢谢你的解释。你用的是哪种数据库管理系统?博士后?甲骨文?@a_horse_与_no_name_数据库管理系统如何影响这种情况?(只是好奇)即使这样做了,也必须使用一个通用的解决方案(如果可能的话),这样我们就可以在不重写查询的情况下更改基础DBMS。@Amit:在这种情况下,DBMS dos很可能无关紧要。但了解DBMS通常有助于提供更好的答案。这个问题实际上没有包含足够的信息,例如
dfc
来自哪里?或者这是一种可能需要递归查询的层次结构(依赖于DBMS)?或者“replace”是否意味着需要一些字符串替换,这同样依赖于DBMS。@我明白你的意思。谢谢你的解释。你用的是哪种数据库管理系统?博士后?甲骨文?@a_horse_与_no_name_数据库管理系统如何影响这种情况?(只是好奇)即使这样做了,也必须使用一个通用的解决方案(如果可能的话),这样我们就可以在不重写查询的情况下更改基础DBMS。@Amit:在这种情况下,DBMS dos很可能无关紧要。但了解DBMS通常有助于提供更好的答案。这个问题实际上没有包含足够的信息,例如
dfc
来自哪里?或者这是一种可能需要递归查询的层次结构(依赖于DBMS)?或者“replace”是否意味着需要一些字符串替换,这同样依赖于DBMS。@我明白你的意思。谢谢你的解释。你用的是哪种数据库管理系统?博士后?甲骨文?@a_horse_与_no_name_数据库管理系统如何影响这种情况?(只是好奇)即使这样做了,也必须使用一个通用的解决方案(如果可能的话),这样我们就可以在不重写查询的情况下更改基础DBMS。@Amit:在这种情况下,DBMS dos很可能无关紧要。但了解DBMS通常有助于提供更好的答案。这个问题实际上没有包含足够的信息,例如
dfc
来自哪里?或者这是一种可能需要递归查询的层次结构(依赖于DBMS)?或者“replace”是否意味着需要一些字符串替换,这同样依赖于DBMS。@我明白你的意思。谢谢你的解释。请不要在where子句中使用老式的隐式连接。在
FROM
子句中使用显式的
JOIN
,对于意外忘记的连接条件更为有效。@a_horse_与_no_name:Agreed,希望我的第二个查询不会让您失望:)这两个条件是不等价的。第二个是外连接,第一个是内部联接。它在这里不起作用。我提供示例数据,以便您理解单个表1.0001 ros abc.com null 2.002 son cbc.com null 3.003 child cnd.com 001 4.004 subc ndd.com 002中可用的数据。上面的数据需要输出为1.001 ros abc.com null 2.002 son cbc.com null 3.003 child cnd.com ros 4.004 suc ndd.comson@Roshan:所以数据是在