【问题标题】:Access 2010 SQL - UPDATE query not workingAccess 2010 SQL - 更新查询不起作用
【发布时间】: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 不会构建新表。它描述了两个表/子查询之间的特定操作。

标签: sql sql-update ms-access-2010


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢大家:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    相关资源
    最近更新 更多