SQL Join multiple dismiss same values if one is false

SQL Join multiple dismiss same values if one is false

这些是我的表格的示例:

Employees
id     | Name 
1      | employee 1   
2      | employee 2    
3      | employee 3    

Busy_Schedule
id     | start_date  | finish_date | employee_id
1      | 20-11-2017  | 22-11-2017  | 1 
2      | 24-11-2017  | 28-11-2017  | 1
3      | 20-11-2017  | 22-11-2017  | 2    
4      | 20-11-2017  | 22-11-2017  | 3

我想根据加入这两个表来选择可用的员工。

例如,我想知道从 21-11-2017 到 23-11-2017 谁有空。 如果我使用 join,我会因为有多个条目而让员工 1 可用,而他在这两个日期之间不可用。

我正在与 Mysql

合作

您需要检查日期范围是否重叠。

Determine Whether Two Date Ranges Overlap

因此,当您知道那些日子里有哪些员工在忙时,只需 select 员工 NOT IN 那一组。

  SELECT *
  FROM Employees 
  WHERE id NOT IN (SELECT employee_id
                   FROM Busy_Schedule
                   WHERE start_date  <= '2017-11-23'
                     AND finish_date >= '2017-11-21')