您的位置:首页 > 数据库

数据库SQL实战

2017-08-03 16:53 218 查看


题目描述

获取所有员工当前的manager,如果当前的manager是自己的话结果不显示,当前表示to_date='9999-01-01'。

结果第一列给出当前员工的emp_no,第二列给出其manager对应的manager_no。

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`));

输入描述:


输出描述:

emp_nomanager_no
1000110002
1000310004
1000910010 
本题应注意以下三点: 

  1、用inner join连接两张表,因为要输出自己的经理,得知自己与经理的部门要相同,故有限制条件 e.dept_no =

  m.dept_no 

  2、再用where限制经理的条件,即 m.to_date 等于 '9999-01-01' 与 e.emp_no 不等于m.emp_no

  3、为了增强代码可读性,将dept_emp用别名e代替,dept_manager用m代替,最后根据题意将e.emp_no用别名manager_no代替后输出
select e.emp_no,m.emp_no as manager_no #将m.emp_no改成manager_no
from dept_emp e inner join dept_manager m
on e.dept_no = m.dept_no
where e.emp_no <> m.emp_no
and e.to_date = '9999-01-01'
and m.to_date = '9999-01-01'

方法2:
select e.emp_no,m.emp_no as manager_no #将m.emp_no改成manager_no
from dept_emp e, dept_manager m
where e.dept_no = m.dept_no
and e.emp_no != m.emp_no
and e.to_date = '9999-01-01'
and m.to_date = '9999-01-01'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: