在其他表中的两个日期之间选择

Jor*_*ata 2 mysql sql

我有一个 mysql 表 (file_ payments) 来保存文件中包含的付款记录,如下所示

ID  FILE   START_DATE   END_DATE    NO_PAYMTS
--  -----  ----------   ----------  ---------
1   file1  2013-10-11   2013-10-15     6
2   file2  2013-10-16   2013-10-20     10
Run Code Online (Sandbox Code Playgroud)

然后我有另一个表(付款),其中包含有关此付款的更多详细信息

   ID   DATE        AMOUNT       BANK   
   ---  ----------  ----------   ----  
    1   2013-10-11  100.00        3
    2   2013-10-12  500.00        3
    3   2013-10-13  400.00        2
    4   2013-10-15  200.00        2 
    5   2013-10-16  400.00        4  
    6   2013-10-18  300.00        1 
    7   2013-10-19  700.00        3 
Run Code Online (Sandbox Code Playgroud)

我需要关联两个表以验证第一个表中的NO_PAYMTS是否与第二个表中的实际付款数相对应,因此我正在考虑计算第二个表中第一个表中START_DATEEND_DATE之间的记录。本例中预期的输出是:

START_DATE   END_DATE    NO_PAYMTS   ACTUAL_PAYMTS
----------   ----------  ---------   -------------
2013-10-11   2013-10-15     6             4
2013-10-16   2013-10-20     10            3
Run Code Online (Sandbox Code Playgroud)

我很困惑如何进行查询,但可能是这样的:

从 file_ payments WHERE () 中选择 ID、FILE、START_DATE、END_DATE、NO_PAYMTS

显然这不起作用,因为 WHERE 子句中没有连接表的条件,我怎样才能使它起作用?

Jus*_*tin 5

询问:

SQLFIDDLE示例

SELECT t1.ID,
       t1.FILE,
       t1.START_DATE,
       t1.END_DATE,
       t1.NO_PAYMTS,
       (SELECT COUNT(*)
        FROM Table2 t2
        WHERE t2.DATE >= t1.START_DATE
        AND t2.DATE <= t1.END_DATE ) AS ACTUAL_PAYMTS
FROM Table1 t1
Run Code Online (Sandbox Code Playgroud)

结果:

| ID |  FILE | START_DATE |   END_DATE | NO_PAYMTS | ACTUAL_PAYMTS |
|----|-------|------------|------------|-----------|---------------|
|  1 | file1 | 2013-10-11 | 2013-10-15 |         6 |             4 |
|  2 | file2 | 2013-10-16 | 2013-10-20 |        10 |             3 |
Run Code Online (Sandbox Code Playgroud)