正则匹配表中数据更新image2的categoryName未达预期效果咨询
问题原因
- LIKE 语法不兼容:你用的
\s是正则语法里的空格表示方式,但Access数据库的LIKE运算符不支持这种转义写法,你写的*[A-Z\s]*会被识别为匹配包含大写字母、\字符、s字符的内容,根本无法匹配带空格的CategoryID,符合要求的记录没有被筛选到,自然不会执行更新。 - 关联逻辑不匹配(如果你的image1存的是单ID对应单分类名):如果你image2里的
AA BB是两个类别ID用空格拼接的多值,而image1里CategoryID都是单值(比如AA对应Archeology、BB对应Business),那原来的image2.CategoryID = image1.CategoryID全等关联逻辑本身就无法匹配到记录,也会导致更新失败。
解决方案
场景1:image1中存在CategoryID为AA BB的记录,对应CategoryName就是Archeology, Business
只需要修正WHERE里的LIKE写法,直接用空格代替\s即可:
UPDATE image2 INNER JOIN [image1] ON image2.CategoryID = image1.CategoryID SET image2.CategoryName = image1.CategoryName WHERE [image1].CategoryID Like "*[A-Z ]*";
场景2:image1中是单ID对应单分类名,需要拼接多ID对应的分类名
先在Access的VBA模块中添加自定义函数用来拼接分类名:
Function GetCategoryNames(catIDs As String) As String Dim idArr As Variant, i As Integer Dim catName As String idArr = Split(catIDs, " ") For i = LBound(idArr) To UBound(idArr) ' 转义单引号避免SQL异常 catName = DLookup("CategoryName", "image1", "CategoryID='" & Replace(idArr(i), "'", "''") & "'") If Not IsNull(catName) Then GetCategoryNames = GetCategoryNames & IIf(GetCategoryNames <> "", ", ", "") & catName End If Next i End Function
再执行更新语句:
UPDATE image2 SET CategoryName = GetCategoryNames(CategoryID) WHERE CategoryID Like "* *";
内容的提问来源于stack exchange,提问作者Srishti Parashar
相关产品推荐
相关产品推荐

