繁体   English   中英

在Microsoft Access中使用选择进行更新

[英]Update with Select in Microsoft Access

我在column1上有没有名称“ NoName”的记录。 其中一些名称存在于同一列上,我试图使用column2来检索与“ NoName”记录具有相同引用的名称 ,以便使用实际名称进行更新。

考虑以下简化表:

|   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] FROM(SELECT [Name],[Ref] FROM [Table] as WHERE [Name] <>'NoName'))中的语法错误(缺少运算符)。

首先,MS Access使用UPDATE...JOIN作为其语法,而不是对UPDATE查询中的多个表使用UPDATE...FROM 其次,Access要求更新查询在不可更新自联接或子查询的情况下必须可更新。

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

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

注意:仅当在MSAccess.exe(Office程序)中使用查询而不是通过ODBC / OLEDB在其后端数据库中使用查询时,此解决方案才有效。 域功能是Access对象库的一部分,而不是Jet / ACE SQL Engine。 并且假定Ref为字符串值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM