在Microsoft访问中使用SELECT更新



我在column1上没有名称" noname"。其中一些名称存在于同一列上,我正在尝试使用 column2 以与" noname"相同的引用来检索 name "记录以更新实际名称。

考虑这个简化的表:

|   name   |   ref   |
----------------------
|  NoName  |   001   |
|  Adam    |   002   |
|  NoName  |   002   |
|  John    |   001   |
|  Ryan    |   003   |

最终结果应该是:

|   name   |   ref   |
----------------------
|  John    |   001   |
|  Adam    |   002   |
|  Adam    |   002   |
|  John    |   001   |
|  Ryan    |   003   |

到目前为止,我所拥有的是:

UPDATE [Table] 
SET [Name] = s.[Name]
FROM (
      SELECT [Name], [Ref] 
      FROM [Table] as s
      WHERE [Name] <> 'NoName')
WHERE 
     [Name]='NoName' AND [Ref] = s.[Ref]"

现在,我遇到了一个错误:

语法错误(缺少操作员)在查询表达式的s。[name] 选择[name],[ref]从[表] as s where [name]&lt;>'noname')'。

首先,MS Access使用UPDATE...JOIN作为其语法,而不是UPDATE查询中多个表的UPDATE...FROM。其次,访问需要更新查询为可更新,其中自加入或子难度不可更新。

但是,您可以使用域函数DLookUp,从同一表中检索值:

UPDATE [Table] t
SET t.[Name] = DLookUp("[Name]", "[Table]", 
                       "[Name] <> 'NoName' AND [Ref] = '" & t.[Ref] & "'")

注意:此解决方案仅在使用MSACCESS.EXE(Office程序)而不是通过ODBC/OLEDB的后端数据库时起作用。域功能是HTE访问对象库的一部分,而不是喷气/ACE SQL引擎。 ref 被认为是字符串值。

最新更新