Access 2010 SQL - 更新查询不起作用

Posted

技术标签:

【中文标题】Access 2010 SQL - 更新查询不起作用【英文标题】:Access 2010 SQL - UPDATE query not working 【发布时间】:2015-10-26 09:40:20 【问题描述】:

我需要创建一个查询来更新表中的列,其中的值取自另一个表并匹配一个字段。

这是两张表:

tblMain
  ID     Autonumbering
  Key    Text
  Stat1  Integer

tblStat1 
  ID     Autonumbering
  Key    Text
  Freq   Integer  

我想更新tblMain.Stat1 列,在其中tblMain.Key = tblStat1.Key 的每条记录上使用tblStat1.Freq 值。

我试过这个语法(在某处找到的例子)

  UPDATE tblMain
  SET tblMain.Stat1 = tblStat1.Freq
  WHERE tblMain.Key = tblStat1.Key;

这不起作用并在第二行返回错误。

经过一些试验,我发现正确的语法(使用 Access 查询生成器构建)是这样的:

  UPDATE (tblMaibn INNER JOIN tblStat1 ON tblMain.Key = tblStat1.Key)
  SET tblMain.Stat1 = tblStat1.Freq; 

在第二种语法中,没有 WHERE 条件的痕迹。 有人可以帮我理解第一种语法有什么问题。 由于我正在构建一个新表(连接),它如何在 tblMain 上工作? 正如我所说,我发现错误的语法作为 UPDATE 语句的示例。

提前谢谢你。 再见, 伊万诺

【问题讨论】:

A join 不会构建新表。它描述了两个表/子查询之间的特定操作。 【参考方案1】:

您在第 2 行的第一个查询中发生的情况是,Access 不知道 tblStat1 在您的查询中代表什么。

您的第二个查询有效的原因是它在相关键上使用了内部联接。为了让 SQL 知道 tblMain 中的哪条记录与 tblStat1 中的哪条记录相关,您需要使用连接。

您可以在生成的代码中看到它正在更新您想要的表,但会加入第二个表。当您更新每条记录时,where 条件是多余的。

【讨论】:

【参考方案2】:

在第一种语法中,您可以更改:

UPDATE tblMain
 SET tblMain.Stat1 = (SELECT Freq
                      FROM tblStat1
                      WHERE tblMain.Key = tblStat1.Key)

【讨论】:

非常感谢大家:-)

以上是关于Access 2010 SQL - 更新查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 2007 SQL 查询出现问题

使用 Access 2010 数据库的 Excel 2010 VBA DAO 查询不起作用

Access 2010 更新查询错误

SQL 查询在 Excel 中不起作用,但在 Access 中起作用

ACCESS 2010 SQL 没有返回数据。 SQL 返回数据相同的查询

Ms Access SQL 更新语句不起作用