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 语句的示例。
提前谢谢你。 再见, 伊万诺
【问题讨论】:
Ajoin
不会构建新表。它描述了两个表/子查询之间的特定操作。
【参考方案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 - 更新查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Access 2010 数据库的 Excel 2010 VBA DAO 查询不起作用
SQL 查询在 Excel 中不起作用,但在 Access 中起作用