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 个表中选择记录的主要内容,如果未能解决你的问题,请参考以下文章