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

4

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

抱歉标题不太好。SO提示说无法发布因为标题已经存在 :-) - Hamptonite
那这是一个重复的问题吗? - David
3个回答

9
我不确定你的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]

请注意,只有在OriginalFinal表中都将[Assest no]作为唯一键,并且它们之间的关系正确时,此操作才能正常工作。


当然,cmsjr的答案更简单。 - Barranka
我不完全确定我的答案是否适用于Access引擎,因此您的答案可能更好。 - cmsjr
这太有效了,救了我的后半生。我尝试了cmsjr的答案,我以为那很容易,但它并不是。非常感谢你们两个。我对SQL不熟悉,但联接语句让我恍惚了。 - Hamptonite
@user1721535 很高兴知道这篇文章对您有所帮助。只是还有一个小小的(非常个人化)观点:MS Access SQL 是一种非常定制化的SQL方言(我称之为“比尔的SQL”)…… 这是学习基础知识的好地方,但有些技巧可能会令人困惑。 - Barranka
2
根据这个,我在Access 2013中创建了下面的查询,并且运行得非常好:UPDATE Components INNER JOIN Analysis ON Components.Component = Analysis.Component SET Components.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) - Shanerk

2

试试这个

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

3
注意:这个查询语法在 MS Access 2007 中不可用。 - John M
1
它应该抛出错误#3075,“查询表达式中的语法错误(缺少运算符)…”。有效的Access SQL UPDATE不包括FROM关键字,并且必须在SET之前完全定义数据源。 - HansUp
3
这也不适用于 Access 2013,与 @HansUp 指出的错误相同。 - ThisClark

0

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

所以我的答案是从创建查询设计开始。选择两个表并正确地进行选择。然后将其修改为更新查询,并将更新应用于要从中更新字段的表的列。然后切换到SQL视图,并将其用作在VBA中构建查询的模型。

我有一个语法正确的SQL语句,但直到我这样做并精确匹配限定和非限定字段名称时,它才声称“不支持连接”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接