2 つの MySQL テーブルがあります
Payments:
| employeeID | period_begin | period_end |
と
Services:
| serviceID | date | employeeID |
Payments で説明されている期間範囲内にない日付を持つ特定の従業員によって実行されたすべての 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 テーブルの間隔の 1 つにあるためです。
何か案は?サービスの日付が Payments テーブルに記録されている間隔の 1 つに含まれていないことを確認するのに問題があります。現在、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';
動かない。