我有两个 MySQL 表
Payments:
| employeeID | period_begin | period_end |
和
Services:
| serviceID | date | employeeID |
我需要查找由给定员工执行的所有 serviceID,其日期不在付款中描述的任何期间范围之间。因此,例如,如果我有以下关于员工 10000 的付款和服务的记录:
Payments:
| employeeID | period_begin | period_end |
...
| 10000 | 2013-05-01 | 2013-05-16 |
| 10000 | 2013-05-17 | 2013-06-02 |
| 10000 | 2013-07-01 | 2013-07-16 |
| 10000 | 2013-07-17 | 2013-08-02 |
...
Services:
| serviceID | date | employeeID |
...
| 2001 | 2013-01-01 | 10000 |
| 2002 | 2013-05-15 | 10000 |
| 2003 | 2013-06-01 | 10000 |
| 2004 | 2013-07-10 | 10000 |
| 2005 | 2013-08-01 | 10000 |
...
输出应该是
2001、2003、2005
因为服务 2002、2004 的日期位于 Payments 表中的间隔之一中。
有任何想法吗?我无法检查服务的日期是否未计入“付款”表中记录的时间间隔之一。我目前正在使用employeeID 加入Services and Payments 并在那里说明日期条件,但我没有得到正确的答案;我可能应该以不同的条件加入:
select distinct serviceID from Services as X left join Payments as Y on
(X.employeeID=Y.employeeID AND (X.date < Y.period_begin OR X.date > Y.period_end))
where X.employeeID='10000';
不管用。