使用HAVING子句访问SQL UPDATE语句

时间:2016-06-06 18:33:46

标签: sql ms-access

我在使用下面的更新声明时遇到问题。我一直错过分号作为错误,任何人都知道正确的语法?

class_b

2 个答案:

答案 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

假设spQuoteStatusfk_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