我需要创建一个查询来更新表中的列,其中的值取自另一个表并匹配一个字段。
这是两个表:
tblMain
ID Autonumbering
Key Text
Stat1 Integer
tblStat1
ID Autonumbering
Key Text
Freq Integer
我想在tblMain.Stat1
的每条记录上更新 tblStat1.Freq
列tblMain.Key = tblStat1.Key
值。
我尝试了这种语法(以某处为例)
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语句的一个例子。
提前谢谢你。 再见, 伊万诺
答案 0 :(得分:1)
您在第二行的第一个查询中发生的事情是,Access并不知道tblStat1在您的查询中代表什么。
您的第二个查询正在运行的原因是因为它在相关键上使用内部联接。为了让SQL知道tblMain中的哪条记录与tblStat1中的哪条记录相关,您需要使用连接。
您可以在生成的代码中看到它正在更新您想要的表,但是加入到第二个表中。当您更新每条记录时,where条件是多余的。
答案 1 :(得分:1)
In 1st syntax, you can change:
UPDATE tblMain
SET tblMain.Stat1 = (SELECT Freq
FROM tblStat1
WHERE tblMain.Key = tblStat1.Key)