我在使用下面的更新声明时遇到问题。我一直错过分号作为错误,任何人都知道正确的语法?
class_b
答案 0 :(得分:0)
您必须在子查询中进行聚合,因为您无法在单个查询中聚合并执行UPDATE。类似的东西:
Update FactQuote fq
LEFT JOIN (SELECT fk_spQuoteID, sum(ItemTotal) as itemTotal FROM FactQuoteProduct GROUP BY fk_spQuoteID) as fqp on fq.spQuoteID=fqp.fk_spQuoteID
SET fq.spQuoteStatus = 5
WHERE fq.quoteDate < 5/10/2016
and fq.spQuoteStatus < 4
and fq.spQuotestatus <>8
and fqp.itemTotal < 2000
答案 1 :(得分:0)
您可以使用DSum()
表达式来避免“无法更新”投诉。
另请注意,不需要这两个条件中的第二个。当spQuoteStatus < 4
时,它不能等于8,因此添加条件spQuotestatus <> 8
没有任何意义:
AND fq.spQuoteStatus < 4
AND fq.spQuotestatus <> 8
假设spQuoteStatus
和fk_spQuoteID
都是数值数据类型......
UPDATE FactQuote AS fq
SET fq.spQuoteStatus = 5
WHERE
fq.quoteDate < #2016-5-10#
AND fq.spQuoteStatus < 4
AND DSum("ItemTotal", "FactQuoteProduct", "fk_spQuoteID=" & spQuoteID) < 2000;
如果这些字段是文本数据类型,请将最后一个条件更改为此...
DSum("ItemTotal", "FactQuoteProduct", "fk_spQuoteID='" & spQuoteID & "'") < 2000