You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

正则匹配表中数据更新image2的categoryName未达预期效果咨询

问题原因

  1. LIKE 语法不兼容:你用的\s是正则语法里的空格表示方式,但Access数据库的LIKE运算符不支持这种转义写法,你写的*[A-Z\s]*会被识别为匹配包含大写字母、\字符、s字符的内容,根本无法匹配带空格的CategoryID,符合要求的记录没有被筛选到,自然不会执行更新。
  2. 关联逻辑不匹配(如果你的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:39:03