首先,我知道已经有关于它的问题和答案,这个主题是最接近我需要的主题:
SQL Update to the SUM of its joined values
但是,我得到一个似乎发生在FROM
子句附近的语法错误(操作符缺失)。但是我看不到它。它不喜欢FROM
本身吗?我不习惯在更新声明中使用FROM
,但它似乎从我刚刚链接的QA中有效:|
知道为什么会出现语法错误?
我正在使用Access 2007 SP3。
编辑: 哇,我忘了发帖了......
UPDATE r
SET
r.tempsmoy_requete_min = tmm.moy_mob_requete
FROM
rapports AS r INNER JOIN
(SELECT
id_fichier,
Round(Sum(temps_requete_min)/3,0) As moy_mob_requete,
Round(Sum(temps_analyse_min)/3,0) As moy_mob_analyse,
Round(Sum(temps_maj_min)/3,0) As moy_mob_maj,
Round(Sum(temps_rap_min)/3,0) As moy_mob_rap,
Round(Sum(temps_ddc_min)/3,0) As moy_mob_ddc
FROM maintenances
WHERE
periode In (10,9,8) And
annee=2011
GROUP BY id_fichier) AS tmm ON rapports.id_rapport = tmm.id_fichier
WHERE
1=0
WHERE 1=0
部分是因为我想在运行之前进一步测试子查询。
编辑:这是我正在尝试的一些更简单的查询。这次我得到了一个不同的错误。它现在告诉我tempsmoy_requete_min(可能还有所有其他左操作数)不是聚合函数的一部分......这是我的查询点。有什么想法吗?
UPDATE
rapports INNER JOIN maintenances ON rapports.id_rapport = maintenances.id_fichier
SET
rapports.tempsmoy_requete_min = Round(Sum(temps_requete_min)/3,0),
rapports.tempsmoy_analyse_min = Round(Sum(temps_analyse_min)/3,0),
rapports.tempsmoy_maj_min = Round(Sum(temps_maj_min)/3,0),
rapports.tempsmoy_rap_min = Round(Sum(temps_rap_min)/3,0),
rapports.tempsmoy_ddc_min = Round(Sum(temps_ddc_min)/3,0)
WHERE
maintenances.periode In (10,9,8) And
maintenances.annee=2011 AND
1=0
答案 0 :(得分:0)
UPDATE r
应该是
UPDATE rapports
您无法在更新目标中可靠地使用别名。
答案 1 :(得分:0)
我尝试调整您的第一个查询示例,并且能够让您的错误消失。然而,我遇到了一个不同的错误('操作必须使用可更新的查询')。
也有可能克服这个错误。但是,我发现使用域函数而不是连接更容易检索替换值。
UPDATE rapports
SET tempsmoy_requete_min = Round(DSum("temps_requete_min",
"maintenances",
"periode In (10,9,8) AND annee=2011 "
& "AND id_fichier='" & id_rapport
& "'")/3, 0);
如果此建议适用于tempsmoy_requete_min
您的数据,则必须将其扩展到您要替换的其他字段。这不会很漂亮。您可以使用保存的查询减少丑陋,然后将其用作DSum()
的“域”参数...这可以让您使用更简单的“条件< / em>“参数。