我正在尝试创建一个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.");
答案 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 :(得分:-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.");