【问题标题】:Employees Hired Within the Same Time Period同一时期内聘用的员工
【发布时间】:2021-01-25 00:18:52
【问题描述】:

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

我有一个员工表,其中包含员工 ID (emp_ID) 及其 (start_Date) 和 (end_Date),它们都是存储为“yyyy-mm-dd”的 DATE 类型。

我的查询是这样的(E1 开始于 2006 年 8 月 27 日,结束于 2009 年 5 月 14 日,E2 开始于 2007 年 1 月 13 日,结束于 2008 年 6 月 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,它不会返回任何内容?我的逻辑缺少一些东西,但我很难找到它。感谢您的时间和帮助。

【问题讨论】:

标签: mysql sql datetime inner-join where-clause


【解决方案1】:

如果我没听错,你只需要修正逻辑以正确检查雇佣期是否重叠:

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 关键字)而不是老式的隐式连接(在 from 子句中使用逗号)

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

  • select * 在这里不是一个好选择:这是一个自连接,因此结果集中的列名不明确;对select 子句中的列进行枚举和别名

【讨论】:

  • 当然!!我想我只是盯着它看了太久,看不到明显的东西。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2021-12-08
  • 2013-09-09
  • 2020-03-12
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多