You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Between的Join查询实现求助:曾实现过但遗忘方法

基于BETWEEN的关联查询与DLookup正确实现方案

一、SQL JOIN 查询的正确写法

你之前的SQL语句本身是可行的,只需注意Access(从DLookup判断是Access环境)的语法细节:

SELECT tblMyData.ID, tblMyData.LineNum, tblBudgetRange.[Budget Name] 
FROM tblMyData 
INNER JOIN tblBudgetRange 
ON tblMyData.LineNum BETWEEN tblBudgetRange.fromLine AND tblBudgetRange.toLine;
  • 字段名带空格(比如[Budget Name])必须用方括号包裹,其他无特殊字符的字段可直接使用。
  • 若要保留所有tblMyData记录(哪怕无匹配预算区间),将INNER JOIN替换为LEFT JOIN即可。

二、DLookup函数的正确用法

你之前的DLookup存在字符串拼接逻辑错误,正确写法分两种场景:

1. Access查询的计算字段中使用

BudgetName: DLookUp("[Budget Name]", "tblBudgetRange", "[LineNum] BETWEEN [fromLine] AND [toLine]")

2. VBA代码中使用

如果需要基于当前记录的LineNum查询:

Dim targetLine As Long
targetLine = Me.LineNum ' 假设从窗体控件获取当前行号
Dim resultName As String
resultName = DLookUp("[Budget Name]", "tblBudgetRange", _
    "[LineNum] BETWEEN [fromLine] AND [toLine] AND [LineNum] = " & targetLine)

注意:DLookup仅返回第一条匹配记录,若存在重叠区间,建议优先用SQL JOIN获取所有匹配结果,性能也更优。

三、常见坑点排查

  • 数据类型一致:LineNum、fromLine、toLine必须为相同数值类型(如整数、长整数),否则BETWEEN比较会失效。
  • 区间重叠问题:若tblBudgetRange存在重叠区间,JOIN会返回多条匹配记录,DLookup仅取第一条,需根据业务需求调整。
  • 拼写检查:表名、字段名必须完全匹配,带空格的字段务必加方括号。

内容的提问来源于stack exchange,提问作者Joel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:42:07