我有一个我正在处理的Access数据库。我有2个表,我想结合两个表。我遇到的问题是我用来匹配两个表的字段并不总是相同的,这意味着我将不得不使用通配符,我不太确定如何做到这一点。
我的两张桌子的名字是:
ACW,保持
QMT
查询将包含以下字段:
两个表上都有的RM字段。
ACW来自表ACT,Hold
Avg Hold来自表ACT,Hold
得分来自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 & "*";
答案 0 :(得分:2)
支持通配符的SQL运算符是LIKE
运算符,因此您的查询应使用它而不是=
运算符:
SELECT [ACW,Hold].RM, [ACW,Hold].ACW, [ACW,Hold].[Avg Hold], QMT.Score
FROM [ACW,Hold] INNER JOIN QMT
ON [ACW,Hold].RM LIKE QMT.RM & "*";
我刚刚在Access 2010中尝试了类似的查询,它似乎按预期工作。
<强>更新强>
如果您需要执行比LIKE比较提供的更复杂的匹配,那么您还可以创建一个VBA函数,该函数接受两个字段值作为参数,并返回一个布尔值,指示它们是否匹配。例如,使用类似
的功能Option Compare Database
Option Explicit
Public Function DoTheyMatch(product As String, ingredient As String) As Boolean
Dim result As Boolean
If product Like ingredient & "*" Then
result = True
ElseIf ingredient = "some special thing" And product = "value to match" Then
result = True
Else
result = False
End If
DoTheyMatch = result
End Function
你可以使用该函数作为JOIN的ON条件:
SELECT i.Ingredient, i.Supplier, p.Product
FROM Ingredients i INNER JOIN Products p
ON DoTheyMatch(p.Product, i.Ingredient);
我刚刚在Access 2010中尝试过它,它也有效。