首页 > 试题广场 >

获取所有员工当前的manager

[编程题]获取所有员工当前的manager
  • 热度指数:486385 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
有一个员工表dept_emp简况如下:
emp_no
dept_no 
from_date 
to_date
10001 d001
1986-06-26 9999-01-01
10002 d001
1996-08-03 9999-01-01
10003 d002
1995-12-03 9999-01-01
第一行表示为员工编号为10001的部门是d001部门。

有一个部门经理表dept_manager简况如下:
dept_no
emp_no
from_date 
to_date
d001 10002
1996-08-03 9999-01-01
d002 10003
1990-08-05 9999-01-01
第一行表示为d001部门的经理是编号为10002的员工。

获取所有的员工和员工对应的经理,如果员工本身是经理的话则不显示,以上例子如下:
emp_no manager
10001 10002

示例1

输入

drop table if exists  `dept_emp` ; 
drop table if exists  `dept_manager` ; 
CREATE TABLE `dept_emp` (
`emp_no` int(11) NOT NULL,
`dept_no` char(4) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
CREATE TABLE `dept_manager` (
`dept_no` char(4) NOT NULL,
`emp_no` int(11) NOT NULL,
`from_date` date NOT NULL,
`to_date` date NOT NULL,
PRIMARY KEY (`emp_no`,`dept_no`));
INSERT INTO dept_emp VALUES(10001,'d001','1986-06-26','9999-01-01');
INSERT INTO dept_emp VALUES(10002,'d001','1996-08-03','9999-01-01');
INSERT INTO dept_emp VALUES(10003,'d002','1995-12-03','9999-01-01');
INSERT INTO dept_manager VALUES('d001',10002,'1996-08-03','9999-01-01');
INSERT INTO dept_manager VALUES('d002',10003,'1990-08-05','9999-01-01');

输出

10001|10002
select dept_emp.emp_no,dept_manager.emp_no as manager
from dept_emp,dept_manager
on dept_emp.dept_no=dept_manager.dept_no
where dept_emp.emp_no not in 
(select emp_no from dept_manager);
发表于 2022-07-23 12:34:57 回复(0)
select t.*
from 
(select em.emp_no,de.emp_no manager
from dept_emp em
left join dept_manager de
where em.dept_no = de.dept_no) t
where t.emp_no != t.manager
发表于 2022-06-02 11:40:44 回复(0)
select a.emp_no, b.emp_no
from dept_emp a join dept_manager b
on a.dept_no = b.dept_no and a.emp_no<>b.emp_no

发表于 2022-04-21 15:26:49 回复(0)
select p.emp_no,r.emp_no manager from dept_emp p, dept_manager r where r.dept_no =p.dept_no  and p.emp_no not in (r.emp_no)
发表于 2022-04-19 17:38:30 回复(0)
select a.emp_no,b.emp_no from dept_emp a join dept_manager b on a.dept_no=b.dept_no
where a.emp_no<>b.emp_no
发表于 2022-04-19 09:57:58 回复(0)
select e.emp_no, m.emp_no from dept_emp as e inner join dept_manager as m on e.dept_no = m.dept_no where e.emp_no != m.emp_no

发表于 2022-02-24 11:02:11 回复(0)
select yg.emp_no,dept_manager.emp_no as manager from
(select emp_no,dept_no from dept_emp where emp_no not in (select emp_no from dept_manager))as yg,dept_manager
where yg.dept_no=dept_manager.dept_no;
发表于 2022-01-20 21:11:24 回复(0)
select de.emp_no, dm.emp_no as manager
from dept_emp as de
join dept_manager as dm on de.dept_no=dm.dept_no
where de.emp_no not in (
    select emp_no
    from dept_manager
);
发表于 2021-11-24 15:29:01 回复(0)
多种方式1:
select
a.emp_no,
b.emp_no
from dept_emp a 
left join dept_manager b
on a.dept_no = b.dept_no
where a.emp_no not in (select emp_no from dept_manager)

方式2:
select
a.emp_no,
b.emp_no
from dept_emp a 
left join dept_manager b
on a.dept_no = b.dept_no
where a.emp_no != b.emp_no





发表于 2021-11-23 17:15:36 回复(0)
select dept_emp.emp_no, dept_manager.emp_no as manager from dept_emp
left join dept_manager on dept_emp.dept_no = dept_manager.dept_no 
where dept_emp.emp_no != dept_manager.emp_no
发表于 2021-11-22 14:19:15 回复(0)

with a as (
select a.emp_no ,b.emp_no manager
from  dept_emp a 
join dept_manager b 
on a.dept_no = b.dept_no
where a.to_date = '9999-01-01'
)
select emp_no,manager
from a
where emp_no !=  manager
拆解 
1 先找到  员工和部门领导对应的关系
2  然后在判断员工和领导两个相等的不显示

发表于 2021-11-18 15:10:47 回复(0)
*LEFT JOIN
select e.emp_no,m.emp_no as manager
from dept_emp e left join dept_manager m on e.dept_no = m.dept_no
where e.emp_no != m.emp_no

*INNER JOIN
select e.emp_no,m.emp_no as manager
from dept_emp e inner join dept_manager m on e.dept_no = m.dept_no
where e.emp_no != m.emp_no
发表于 2021-11-17 10:32:46 回复(0)

不懂就问
dept_manager.to_date='9999-01-01'
什么意思,两个表的to_date都是同一个日期,有啥意义,求解


发表于 2021-10-19 14:16:08 回复(0)
select* from (select dept_emp.emp_no,dept_manager.emp_no manager 
from dept_emp,dept_manager
where dept_emp.dept_no=dept_manager.dept_no) s
where emp_no!=manager

发表于 2021-10-13 11:27:46 回复(0)
select e.`emp_no`,m.`emp_no`as manager 
from dept_emp as e inner join dept_manager as m
on e.dept_no ==m.dept_no
where e.emp_no not in (select emp_no from dept_manager);


1、将查询的员工id仍然设为emp_no列,将查询到的经理id设置为manager列
2、使用INNER JOIN 联合两张表查询
3、因为员工同时为经理的话不输出,那么只要存在员工不在经理表的情况就可以查询出来
发表于 2021-09-26 10:31:51 回复(0)
select dept_emp.emp_no,dept_manager.emp_no
from dept_emp
inner join dept_manager
on dept_emp.dept_no=dept_manager.dept_no
where dept_emp.emp_no!=dept_manager.emp_no
发表于 2021-09-23 09:36:59 回复(0)
select t1.emp_no
    ,t2.emp_no as manager
from dept_emp t1
left join dept_manager t2
on t1.dept_no = t2.dept_no
where t1.emp_no <> t2.emp_no

发表于 2021-09-02 19:12:43 回复(0)
select D.emp_no,M.emp_no manager from dept_emp D , dept_manager M where D.dept_no = M.dept_no and D.emp_no != M.emp_no
发表于 2021-08-20 10:24:02 回复(0)
select emp.emp_no,ma.emp_no
from dept_emp as emp left outer join dept_manager as ma
on emp.dept_no=ma.dept_no
where emp.emp_no<>ma.emp_no and emp.dept_no is not null;
使用外联结,部门为联结键,过滤条件为 员工不是manager(即员工编号与主管的员工编号不一致),此外,还另考虑没有部门编号的员工,使用is not null 排除
发表于 2021-08-14 13:44:44 回复(0)