如何选择与新轮班时间同时没有班次的员工?

时间:2017-08-09 15:15:47

标签: mysql sql select

我正在尝试创建一个select语句,该语句从Employees表中获取Firstname,Lastname和ID,这些表在给定的班次时间内没有移位。

有两个表被查询。员工表和班次表。 Employee表具有要重试的Firstname,Lastname和employeeID。 Shift表具有CurrentOwnerEmployeeID(与employeeID相同),startTime和endTime。 startTime表示班次的开始,endTime表示班次的结束。

我正在尝试制作一份在新班次同时没有轮班的员工名单。 (新班次是一组开始和结束时间)。

目前我已经制作了这个选择语句,该语句没有返回正确的员工列表。

SELECT Firstname, Lastname, employeeID FROM `Employees` 
WHERE employeeID NOT IN 
(SELECT CurrentOwnerEmployeeID FROM Shifts 
 WHERE `date` = '2017-08-08' AND  `startTime` Between ".ShiftStart." and ".ShiftEnd.");

2 个答案:

答案 0 :(得分:0)

您可以尝试使用以下查询。 如果它还没有显示,请随时给我发表评论。

SELECT Firstname, Lastname, employeeID FROM `Employees` 
WHERE employeeID NOT IN 
(SELECT CurrentOwnerEmployeeID FROM Shifts 
WHERE `date` = '2017-08-08' AND NOT ((`endTime` <= ".ShiftStart.") OR 
`startTime` >= ".ShiftEnd."));

在上面的查询中,如果员工的班次不在ShiftStart和ShiftEnd之间,那么只有两个职位,不符合以下情况的员工班次将与新的班次时间发生冲突:

  1. endTime早于shiftStart
  2. startTime在shiftEnd之后
  3. 希望我回答你的问题。

答案 1 :(得分:-1)

我可以建议使用&lt;&gt;代码“不等于”

SELECT Firstname
     , Lastname
     , employeeID 
  FROM `Employees`
 WHERE employeeID <>
       (SELECT CurrentOwnerEmployeeID 
          FROM Shifts
        WHERE `date` = '2017-08-08' 
           AND  `startTime` Between ".ShiftStart." and ".ShiftEnd.");