首页 > 试题广场 >

获取所有员工当前的manager

[编程题]获取所有员工当前的manager
  • 热度指数:486863 时间限制: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
LEFT JOIN dept_manager ON dept_emp.dept_no = dept_manager.dept_no
WHERE
dept_emp.emp_no != dept_manager.emp_no

发表于 2024-06-03 18:21:07 回复(0)
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
NOT IN (
    SELECT m.emp_no
    FROM dept_manager
);
发表于 2024-05-16 09:56:44 回复(0)
select a.* from
(select de.emp_no, dm.emp_no as manager from dept_emp de
left join dept_manager dm
on de.dept_no = dm.dept_no) as a
where a.emp_no != a.manager
发表于 2024-05-08 22:16:27 回复(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
发表于 2024-05-07 20:05:25 回复(0)
select t1.emp_no,t2.emp_no
from dept_emp t1 left join dept_manager t2
    on t1.dept_no = t2.dept_no
where t1.emp_no <> t2.emp_no

发表于 2024-04-29 09:09:09 回复(0)
select de.emp_no,dm.emp_no as manager
from dept_emp de
left join dept_manager dm
on de.dept_no=dm.dept_no
where de.emp_no not in (select emp_no from dept_manager)

发表于 2024-04-12 18:09:58 回复(0)
select u.emp_no,(
    select emp_no
    from dept_manager
    where dept_no=u.dept_no
)
from dept_emp u
where emp_no not in (
    select emp_no
    from dept_manager
)

编辑于 2024-03-27 19:42:31 回复(0)

SELECT e.emp_no AS 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&nbs***bsp;m.emp_no IS NULL;

编辑于 2024-02-23 18:04:27 回复(0)
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.emp_no not in
(select distinct emp_no from dept_manager);

编辑于 2024-02-05 21:43:57 回复(0)
select e.emp_no,m.emp_no as manager
from dept_emp e,dept_manager m
where e.emp_no not in (
    select emp_no
    from dept_manager
) and e.dept_no = m.dept_no;
发表于 2024-01-23 00:11:24 回复(0)
select
de.emp_no as emp_no,
dm.emp_no as manager
from dept_manager as dm
left join dept_emp as de on dm.dept_no = de.dept_no
having emp_no != manager

编辑于 2024-01-08 11:12:27 回复(0)
select
    a.emp_no,
    b.emp_no as manager
from
    dept_emp a
    inner join dept_manager b on a.dept_no = b.dept_no

        and a.emp_no != b.emp_no;
发表于 2023-11-23 13:19:32 回复(0)
select de.emp_no,dm.emp_no as manager from dept_emp de
inner join dept_manager dm
on de.dept_no = dm.dept_no and de.emp_no != dm.emp_no;
发表于 2023-11-16 10:36:59 回复(0)
select c.emp_no,cc.emp_no manager from (select a.* from dept_emp a where not exists(select emp_no from dept_manager b where a.emp_no = b.emp_no)) c
left join dept_manager cc  on c.dept_no = cc.dept_no ;

c结果集是普通员工,cc 是部门表,通过部门号左连接直接获取领导得员工号别名manager 
发表于 2023-11-15 16:02:09 回复(0)
select dept_emp.emp_no emp_no,dept_manager.emp_no 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
发表于 2023-10-30 18:53:48 回复(0)
select
    dept_emp.emp_no,
    dept_manager.emp_no manager
from
    dept_emp
    join dept_manager on dept_emp.dept_no = dept_manager.dept_no
where
    dept_emp.emp_no != dept_manager.emp_no


发表于 2023-10-19 16:57:03 回复(0)
为什么你们还要过滤时间?
select de.emp_no,dm.emp_no as manager
from dept_emp de inner join dept_manager dm
on de.dept_no=dm.dept_no
where de.emp_no<>dm.emp_no


发表于 2023-09-28 13:34:45 回复(0)
# 获取所有的员工和员工对应的经理,如果员工本身是经理的话则不显示,以上例子如下:

select 
   t1.emp_no,
   t2.emp_no as manager
from dept_emp t1 
inner join dept_manager t2 
on t1.dept_no = t2.dept_no
where t1.emp_no<>t2.emp_no

发表于 2023-09-05 20:12:48 回复(0)

问题信息

难度:
164条回答 41216浏览

热门推荐

通过挑战的用户

查看代码