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

时间:2018-03-11 04:33:13

标签: sql ms-access foreign-keys relational-database ms-access-2016

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

enter image description here

在我的Miles表中,我正在记录每个驱动器末尾的汽车仪表板上的信息。

我还有一个名为Fuel的第二个表(实际上是一个查询):

enter image description here

我的Fuel查询显示我何时购买了燃料以及购买了多少燃料。

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

enter image description here

我尝试了以下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找不到名称[Miles]![Miles_Date]

1 个答案:

答案 0 :(得分:2)

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

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;

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