Ms access MS Access具有不精确匹配的内部联接(通配符或类似)
我有一个Access数据库,我目前正在处理。我有两张桌子,我想合并两张桌子。我遇到的问题是,我用于匹配两个表的字段并不总是相同的,这意味着我必须使用通配符,我不太确定如何做到这一点 我的两个表的名称是: ACW,等一下 QMT 查询将包含以下字段: 两个表上都存在的RM字段 ACW来自表ACT,保持 平均保持来自表ACT,保持 分数来自表QMT 但是,我使用的字段是“RM”,因为它是名称,其中一些字段在第一个表中是姓,在另一个表中是姓。此外,在某些场景中还有额外的字符。有没有办法做到这一点 我尝试了以下方法,但没有成功:Ms access MS Access具有不精确匹配的内部联接(通配符或类似),ms-access,vba,ms-access-2010,ms-access-2007,Ms Access,Vba,Ms Access 2010,Ms Access 2007,我有一个Access数据库,我目前正在处理。我有两张桌子,我想合并两张桌子。我遇到的问题是,我用于匹配两个表的字段并不总是相同的,这意味着我必须使用通配符,我不太确定如何做到这一点 我的两个表的名称是: ACW,等一下 QMT 查询将包含以下字段: 两个表上都存在的RM字段 ACW来自表ACT,保持 平均保持来自表ACT,保持 分数来自表QMT 但是,我使用的字段是“RM”,因为它是名称,其中一些字段在第一个表中是姓,在另一个表中是姓。此外,在某些场景中还有额外的字符。有没有办法做到这一点 我尝
SELECT [ACW,Hold].RM, [ACW,Hold].ACW, [ACW,Hold].[Avg Hold], QMT.Score
FROM [ACW,Hold] INNER JOIN QMT ON [ACW,Hold].RM = QMT.RM & "*";
支持通配符的SQL运算符是
LIKE
运算符,因此您的查询应该使用它而不是=
运算符:
选择[ACW,Hold].RM[ACW,Hold].ACW[ACW,Hold].[Avg Hold],QMT.Score
从[ACW,Hold]内部连接QMT
在[ACW,Hold].RM上,类似于QMT.RM&“*”;
我刚刚在Access 2010中尝试了一个类似的查询,它似乎如预期的那样工作
更新
如果需要执行比单一类比较更复杂的匹配,则还可以创建一个VBA函数,该函数接受两个字段值作为参数,并返回一个布尔值,指示它们是否匹配。例如,使用如下函数
选项比较数据库
选项显式
公共函数DoTheyMatch(产品作为字符串,成分作为字符串)作为布尔值
将结果设置为布尔值
如果产品类似于配料&“*”那么
结果=真
ElseIf component=“一些特殊的东西”和product=“要匹配的价值”然后
结果=真
其他的
结果=错误
如果结束
DoTheyMatch=结果
端函数
您可以使用该函数作为连接的条件:
选择i.成分、i.供应商、p.产品
从成分我内部加入产品p
ON-DoTheyMatch(p.产品,i.成分);
我刚刚在Access 2010中尝试过,它也起到了作用。请将表格的格式设置为让参与者能够轻松理解结构是的。然而,它起作用了,它并不是拉动一切。我是否可以添加其他内容来尝试捕获所有值?顺便说一句,我很感谢你的帮助。所以用一些数据来更改“一些特殊的东西”和“要匹配的值”?是的,这就是想法。