获取员工其当前的薪水比其manager当前薪水还高的相关信息,当前表示to_date=’9999-01-01’,
    结果第一列给出员工的emp_no,
    第二列给出其manager的manager_no,
    第三列给出该员工当前的薪水emp_salary,
    第四列给该员工对应的manager当前的薪水manager_salary

    1. CREATE TABLE `dept_emp` (
    2. `emp_no` int(11) NOT NULL,
    3. `dept_no` char(4) NOT NULL,
    4. `from_date` date NOT NULL,
    5. `to_date` date NOT NULL,
    6. PRIMARY KEY (`emp_no`,`dept_no`));
    7. CREATE TABLE `dept_manager` (
    8. `dept_no` char(4) NOT NULL,
    9. `emp_no` int(11) NOT NULL,
    10. `from_date` date NOT NULL,
    11. `to_date` date NOT NULL,
    12. PRIMARY KEY (`emp_no`,`dept_no`));
    13. CREATE TABLE `salaries` (
    14. `emp_no` int(11) NOT NULL,
    15. `salary` int(11) NOT NULL,
    16. `from_date` date NOT NULL,
    17. `to_date` date NOT NULL,
    18. PRIMARY KEY (`emp_no`,`from_date`));

    图片.png
    思路:
    dept_emp左联salaries,emp_no相同,得出emp_no,salary
    dept_emp左联dept_manager,dept_no相同,输出dept_manager的emp_no
    我不知道咋打印manager_salary

    1. select de.emp_no,dm.emp_no as manager_no,s.salary,r.salary AS manager_salary,s.to_date,r.to_date
    2. from dept_emp AS de
    3. left JOIN salaries AS s
    4. ON de.emp_no=s.emp_no AND s.to_date='9999-01-01'
    5. left join dept_manager AS dm
    6. ON de.dept_no=dm.dept_no
    7. left join salaries AS r
    8. ON dm.emp_no=r.emp_no AND r.to_date='9999-01-01'
    9. /*一开始写成r了 就打印不出来*/
    10. where de.emp_no not in (select emp_no from dept_manager)

    答案:

    1. SELECT de.emp_no,dm.emp_no manager_no,
    2. sa.salary emp_salary,sal.salary manager_salary
    3. FROM dept_emp de,salaries sa,dept_manager dm,salaries sal
    4. WHERE de.emp_no=sa.emp_no
    5. AND dm.emp_no=sal.emp_no
    6. AND de.dept_no=dm.dept_no
    7. AND de.to_date='9999-01-01'
    8. AND sa.to_date='9999-01-01'
    9. AND dm.to_date='9999-01-01'
    10. AND sal.to_date='9999-01-01'
    11. AND sa.salary>sal.salary