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

Posted

技术标签:

【中文标题】MS Access:从没有外键的 2 个表中选择记录【英文标题】:MS Access: Selecting Records from 2 Tables Without Foreign Key 【发布时间】:2018-03-11 04:33:12 【问题描述】:

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

在我的Miles 表中,我正在记录每次行驶结束时汽车仪表板的信息。

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

我的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 找不到名称 [Miles]![Miles_Date]

【问题讨论】:

【参考方案1】:

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

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;

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

【讨论】:

以上是关于MS Access:从没有外键的 2 个表中选择记录的主要内容,如果未能解决你的问题,请参考以下文章

从具有 2 个外键的 2 个表中选择

MS Access Form:在没有键的情况下将新信息输入到两个链接表中

SQL怎么在有外键的主键表中插数据

SQL怎么在有外键的主键表中插数据

如何在有外键关系的表中删除数据

我有两个带外键的表,我想在第一个表中按下外键,第二个表出现数据