同期录用员工

Employees Hired Within the Same Time Period

我 运行 在尝试查看两个员工是否在同一时间段内工作时,我的查询逻辑遇到了一个奇怪的困难。

我有一个员工 table,其员工 ID (emp_ID) 及其 (start_Date) 和 (end_Date) 都是 DATE 类型,存储为“ yyyy-mm-dd".

我的查询是这样的(E1开始于2006-08-27,结束于2009-05-14,E2开始于2007-01-13,结束于2008-06-25,换句话说,他们在同一时间工作时期):

SELECT *
FROM employees e1, employees e2
WHERE e1.emp_ID = '1' AND e2.emp_ID = '2'
AND e1.start_Date <= e2.start_Date AND e1.end_Date >= e2.end_Date;

如果我要翻转两个员工 ID,它不会 return 什么?我的逻辑缺少一些东西,但我正在努力寻找它。感谢您的宝贵时间和帮助。

如果我没听错的话,你只需要修正一下逻辑就可以正确检查雇佣期是否重叠了:

select e1.emp_id emp_id_1, e2.emp_id emp_id_2
from employees e1
inner join employees e2
    on e1.start_date <= e2.end_date and e1.end_date >= e2.start_date
where e1.emp_id = 1 and e2.emp_id = 2

备注:

  • 使用标准的显式连接(使用 on 关键字)而不是 old-school,隐式连接(在 from 子句中使用逗号)

  • 看起来emp_id是一个数字,所以应该这样处理(文字值周围没有单引号)

  • select * 在这里不是一个好的选择:那是一个 self-join,所以列名在结果集中不明确;对 select 子句

    中的列进行枚举和别名