MS Access 内部连接不完全匹配(通配符或类似)
MS Access inner join with inexact matching (wildcard or similar)
我有一个正在使用的 Access 数据库。我有 2 个 table,我想合并两个 table。我遇到的问题是我用来匹配两个 table 的字段并不总是相同的,这意味着我将不得不使用通配符,但我不太确定如何做到这一点。
我的两个 table 的名字是:
ACW,保持
QMT
查询将包含以下字段:
RM 两个 table 都存在的字段。
ACW 来自table ACT,Hold
Avg Hold 来自 table ACT,Hold
分数来自table QMT。
我使用的字段是 "RM" 但是,因为它是名字,其中一些是第一个 table 中的名字和姓氏在另一个 table 中.此外,在某些情况下还有额外的字符。有办法实现吗?
我尝试了以下但没有成功:
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
运算符,所以你的查询应该使用它而不是=
运算符:
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 接受两个字段值作为参数和 returns 布尔值的函数指示它们是否匹配的值。例如,使用
这样的函数
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 中尝试过,它也有效。
我有一个正在使用的 Access 数据库。我有 2 个 table,我想合并两个 table。我遇到的问题是我用来匹配两个 table 的字段并不总是相同的,这意味着我将不得不使用通配符,但我不太确定如何做到这一点。
我的两个 table 的名字是:
ACW,保持
QMT
查询将包含以下字段:
RM 两个 table 都存在的字段。
ACW 来自table ACT,Hold
Avg Hold 来自 table ACT,Hold
分数来自table QMT。
我使用的字段是 "RM" 但是,因为它是名字,其中一些是第一个 table 中的名字和姓氏在另一个 table 中.此外,在某些情况下还有额外的字符。有办法实现吗?
我尝试了以下但没有成功:
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
运算符,所以你的查询应该使用它而不是=
运算符:
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 接受两个字段值作为参数和 returns 布尔值的函数指示它们是否匹配的值。例如,使用
这样的函数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 中尝试过,它也有效。