【问题标题】:Update MSAccess table from another Access table using SQL使用 SQL 从另一个 Access 表更新 MS Access 表
【发布时间】:2023-03-22 14:25:01
【问题描述】:

我正在尝试使用 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]

【问题讨论】:

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

标签: sql ms-access ms-access-2007


【解决方案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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多