我在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 被认为是字符串值。