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')
这些是我的表格的示例:
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')