具有不精确匹配的MS Access内连接(通配符或类似)

时间:2015-12-29 01:23:59

标签: ms-access access-vba ms-access-2010 ms-access-2007

我有一个我正在处理的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 & "*";

1 个答案:

答案 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中尝试过它,它也有效。