使用 SQL 从另一个 Access 表更新 MS Access 表

Posted

技术标签:

【中文标题】使用 SQL 从另一个 Access 表更新 MS Access 表【英文标题】:Update MSAccess table from another Access table using SQL 【发布时间】:2012-10-04 22:57:29 【问题描述】:

我正在尝试使用 Final 中的值更新表 Original。我是 SQL 的新手,但我已经在这两个小时试图更改各种示例以满足我的需求。我正在使用 Access 2007。

UPDATE 
  Original o
SET 
  o.[Assest Description] = (
    SELECT f.[Assest Description] FROM Original o, Final f 
    WHERE o.[Assest No] = f.[Assest No])
WHERE o.[Assest No] = Final.[Asset No]

【问题讨论】:

对不起这个蹩脚的标题。所以说不能发布,因为标题存在:-) 那是重复的问题吗? 【参考方案1】:

我不确定您的 select 语句只返回一行。如果您想使用select 语句对表执行分配更新,您必须确保它只返回一行。

除此之外,你可以考虑下一个解决方案:

update 
   Original as o
   inner join Final as f on o.[Assest No] = f.[Assest No]
set
   o.[Assest Description] = f.[Assest Description]

请注意,只有在 [Assest no] 都是 OriginalFinal 表中的唯一键并且它们正确相关时,这才能正常工作。

【讨论】:

当然cmsjr的回答比较简单 我不完全确定我的答案是否适用于 Access 引擎,因此您的答案可能会更好。 这完全奏效并拯救了我的后腿。我已经尝试过 cmsjr 答案,我认为这很容易,但事实并非如此。谢谢你俩。我不擅长 SQL,但连接语句让我感到很困惑。 @user1721535 很高兴知道这对您有所帮助。还有一点(非常个人)的意见:MS Access SQL 是一种非常定制的 SQL 方言(我称之为“Bill's SQL”)......这是学习基础知识的好地方,但它有一些可能会造成混淆的技巧 基于此,我在 Access 2013 中进行了以下查询,效果很好:UPDATE Components INNER JOIN Analysis ON Components.Component = Analysis.Component SETComponents.BusinessUnit = Analysis.[Test Area], Components.Impact = Analysis.Impact, Components.InScope = SWITCH (Analysis.[Test Area] = "NA", False, True, True), Components.InUse = SWITCH (Analysis.[Test Area] = "Not Used", False, True, True)【参考方案2】:

试试这个

UPDATE o 
SET o.[Assest Description] =  f.[Assest Description]
FROM Original o, Final f WHERE o.[Assest No] = f.[Assest No]

【讨论】:

作为注释 -> 此查询语法不适用于 MS Access 2007 它应该抛出错误#3075,“查询表达式中的语法错误(缺少运算符)......”。有效的 Access SQL UPDATE 不包含 FROM 关键字,您必须在 SET 之前完全定义数据源。 这也不适用于 Access 2013,与@HansUp 指出的错误相同【参考方案3】:

访问非常挑剔。如果您完全限定要更新的字段的名称,它可能会失败。如果您不完全限定连接表和字段,它可能会返回“不支持连接”。我说可能是因为稍有不同的版本可能会做不同的事情。至少这是我的经验。

所以我的答案是从 Create->Query Design 开始。 选择两个表并让选择正常工作。然后将其修改为更新查询,并从要更新的表中更新要更新字段的列。 然后切换到 SQL 视图并将其用作在 VBA 中构建查询的模型。

我有一个语法正确的 SQL 语句,但直到我这样做,然后完全匹配限定字段名称和非限定字段名称,它声称不支持 JOIN。

【讨论】:

以上是关于使用 SQL 从另一个 Access 表更新 MS Access 表的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA (MS Access) 中的 bigint 字段更新 SQL 表

MS Access SQL:使用另一个表中的Sum更新连接查询

引用其他表的 SQL MS Access 条件更新查询

MS Access 表单以更新多个表而无需子表单

如何使用 SQL 查询从另一个表中更新作为下拉列表的字段

如何通过 MS ACCESS 表执行 SQL Server 表的批量更新