同期录用员工
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
子句
中的列进行枚举和别名
我 运行 在尝试查看两个员工是否在同一时间段内工作时,我的查询逻辑遇到了一个奇怪的困难。
我有一个员工 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
子句