MS Access:从没有外键的 2 个表中选择记录

MS Access: Selecting Records from 2 Tables Without Foreign Key

我正在 MS Access 2016 中跟踪我的驾驶习惯。我有一个名为 Miles:

的 table

在我的 Miles table 中,我在每次驾驶结束时记录我汽车仪表盘上的信息。

我还有一个名为 Fuel:

的第二个 table(实际上是一个查询)

我的 Fuel 查询显示我购买燃料的时间和数量。

我想创建一个查询,显示小于或等于每个 Miles_Date 的最大 Transaction_Date。我的预期输出看起来像这样:

我尝试了以下 Select 语句:

SELECT 
    Miles.Miles_ID, 
    DMax("[Transaction_Date]", "Fuel", "[Fuel]![Transaction_Date] <= [Miles]![Miles_Date]") AS Fuel_Date, 
    Miles.Miles_Date, Miles.Miles, Miles.MPG
FROM 
    Miles;

我收到错误:

Microsoft Access cannot find the name [Miles]![Miles_Date]

使用域聚合时,需要使用字符串连接来传递当前行的值,如下所示:

SELECT 
    Miles.Miles_ID, 
    DMax("[Transaction_Date]", "Fuel", "[Fuel].[Transaction_Date] <= #" & Format(Miles.Miles_Date, "yyyy-mm-dd") & "#") AS Fuel_Date, 
    Miles.Miles_Date, Miles.Miles, Miles.MPG
FROM 
    Miles;

但是,在查询中使用域聚合是一种不好的做法,因为它限制了优化器的影响。如果可能,请改用子查询:

SELECT 
    Miles.Miles_ID, 
    (SELECT Max([Transaction_Date]) FROM Fuel WHERE [Fuel].[Transaction_Date] <= Miles.Miles_Date) AS Fuel_Date, 
    Miles.Miles_Date, Miles.Miles, Miles.MPG
FROM 
    Miles;

这将 运行 更快,并且不依赖于字符串连接。