【问题标题】:Update with Select in Microsoft Access在 Microsoft Access 中使用 Select 进行更新
【发布时间】:2017-09-24 22:58:29
【问题描述】:

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

考虑这个简化的表格:

|   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 s WHERE [Name] 'NoName')'。

【问题讨论】:

    标签: sql ms-access sql-update


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我通过 DAO 连接访问它。代码如下所示:OpenDatabase(FullPath).Execute SQL
    • 但是您在 MSAccess.exe 中运行?如果是这样,它应该工作。你试过解决方案吗?
    • 我在 Excel 中运行,而不是在 Access 中。
    • 再一次,你试过了吗? DAO 是一个 Access 对象,因此可能允许它。同样,对于UPDATE...JOIN,您将加入一个不可可更新 的自联接或子查询。因此,DLookUp 路由。
    • 太棒了!乐意效劳。编码愉快!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    相关资源
    最近更新 更多