如何在MS Access中通过精确匹配+范围匹配连接两张表?
MS Access 多条件关联查询实现
需要关联Results_Table与Limits_Table,同时满足以下两个匹配条件,获取对应Limit值:
Info、Entity字段精确匹配Results_Table.RefDate处于Limits_Table.From_Date与Limits_Table.To_Date的日期范围内
Limits_Table 数据
| Info | Entity | From_Date | To_Date | Limit |
|---|---|---|---|---|
| M1 | PARENT | 31/03/2023 | 01/01/2050 | 384% |
| M1 | PARENT | 28/02/2022 | 31/03/2023 | 350% |
| M1 | PARENT | 28/02/2021 | 27/02/2022 | 275% |
| M1 | PARENT | 01/01/2020 | 04/03/2021 | 235% |
| M1 | PARENT | 01/12/2019 | 31/12/2019 | 209% |
| M2 | CHILD | 21/10/2020 | 01/01/2050 | 115% |
| M2 | CHILD | 01/12/2019 | 20/10/2020 | 140% |
| M2 | PARENT | 21/10/2022 | 01/01/2050 | 135% |
| M2 | PARENT | 01/12/2019 | 21/10/2022 | 140% |
| M2 | PARENT | 05/02/2019 | 30/11/2019 | 138% |
Results_Table 数据
| Info | Entity | RefDate | Value |
|---|---|---|---|
| M2 | PARENT | 31/07/2023 | 168.9% |
| M2 | CHILD | 31/07/2023 | 482.01% |
| M1 | PARENT | 31/07/2023 | 278.53% |
| M1 | CHILD | 31/07/2023 | 482.01% |
| M2 | PARENT | 10/06/2023 | 164.35% |
| M2 | CHILD | 10/06/2023 | 150.17% |
| M1 | PARENT | 10/06/2023 | 344.79% |
| M1 | CHILD | 10/06/2023 | 213.94% |
期望查询输出(Query_Output)
| Info | Entity | RefDate | Value | Limit |
|---|---|---|---|---|
| M2 | PARENT | 31/07/2023 | 168.9% | 135% |
| M2 | CHILD | 31/07/2023 | 482.01% | 115% |
| M1 | PARENT | 31/07/2023 | 278.53% | 384% |
| M1 | CHILD | 31/07/2023 | 482.01% | |
| M2 | PARENT | 10/06/2023 | 164.35% | 140% |
| M2 | CHILD | 10/06/2023 | 150.17% | 115% |
| M1 | PARENT | 10/06/2023 | 344.79% | 350% |
| M1 | CHILD | 10/06/2023 | 213.94% |
实现SQL语句
使用**左连接(LEFT JOIN)**确保Results_Table的所有记录都被保留,即使没有匹配的Limit值:
SELECT R.Info, R.Entity, R.RefDate, R.Value, L.Limit FROM Results_Table AS R LEFT JOIN Limits_Table AS L ON R.Info = L.Info AND R.Entity = L.Entity AND R.RefDate BETWEEN L.From_Date AND L.To_Date;
关键说明
- LEFT JOIN:保证
Results_Table中所有行都会出现在结果中,无匹配时Limit字段显示为空 - 多条件关联:同时满足
Info、Entity精确匹配,以及日期区间判断 - 日期比较:使用
BETWEEN简化日期范围判断,需确保所有日期字段在Access中为日期/时间类型;若存储为文本,需先通过CDate()函数转换为日期格式再进行比较
内容的提问来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

