访问:使用子查询中的计数更新查询 - 错误或所有结果

Posted

技术标签:

【中文标题】访问:使用子查询中的计数更新查询 - 错误或所有结果【英文标题】:Access: Update query with count in subquery - error or all results 【发布时间】:2015-07-29 09:10:20 【问题描述】:

我知道您不应该将计算值存储在数据库中,但在这种情况下,结构已经给出,我必须处理它。

我有两张桌子:

Table1 与字段(即customer, product, price, count

Table2 与字段(即customer, product, description

我现在需要用表 2 中匹配条目的数量更新表 1 中的字段“计数”。这两个表需要通过“客户”和“产品”连接。

我的想法是这样的:

UPDATE Table1 SET Table1.count = 
    (SELECT COUNT(Table2.customer) 
     FROM Table2 
     WHERE Table2.customer = Table1.customer AND Table2.product = Table1.product) 
WHERE Table1.count IS NULL

但这给出了一个错误:

操作必须是可更新的查询。

我正在搜索这边和网络,有人建议使用 DCount 函数,所以我重写了我的代码来做到这一点:

UPDATE Table1 
SET Tabl1.count = DCount( "*", "Table2", "Table2.product = "& Table1.product AND "Table2.customer = "& Table1.customer) 
WHERE Table1.count IS NULL

不幸的是,这总是会返回所有存在于Table2 中的条目。因此,如果我在 Table2 中有 100 个条目,则 DCount 值 = 100,而不是 Table1 特定条目的匹配条目数量(其中客户和产品相同)。

有人可以指出我在该语句中缺少的内容,以便我可以使用来自Table2 的匹配条目数更新“计数”列。

【问题讨论】:

Operation must use an updatable query. (Error 3073) Microsoft Access 的可能重复项 【参考方案1】:

创建一个带有计数的临时表:

SELECT customer, product, COUNT(customer) as count
INTO CustomerCounts
FROM Table2 
GROUP BY customer, product

用 Table1 更新新表的联接:

UPDATE 
    Table1 t JOIN 
    CustomerCounts cc ON cc.customer = t.customer
       AND cc.product = t.product
SET t.count = cc.count

【讨论】:

你好。感谢你的回答。我试图这样做并定义了一个带有选择查询(临时表)的表,并通过连接在更新查询中使用该表。问题是当温度。表 qry 已执行 我收到错误消息“您尝试执行的查询不包含指定表达式‘客户’作为聚合函数的一部分”。如果我忽略所有内容而不是 COUNT(..) 语句,则此查询有效,但只要我包含客户和产品字段,我就会收到错误消息。 对不起,我忘了包括 group by,更新了答案 谢谢。在写我的评论时已经注意到我自己。我现在有一个错误,我不能在更新查询中使用临时表,因为访问会给出错误消息“操作必须是可更新的查询”。有什么解决办法吗? 当正在更新的表没有唯一的 MS-ACCESS 键时会发生这种情况。 (不管 SQL 模式)。看到这个 - ***.com/questions/170578/… 最后,我将您的代码用于临时表,但用它制作了一个真实的表,动态填充。在它是一个真实的表之后,“操作必须是一个可更新的查询”就没有问题了,所以我现在可以选择数据并将其与另一个表连接。

以上是关于访问:使用子查询中的计数更新查询 - 错误或所有结果的主要内容,如果未能解决你的问题,请参考以下文章

symfony 中的子查询

更新 mongo 文档数组中的单个子文档的计数

SQL错误使用多个子查询的字段列表中的未知列

使用表中的变量访问循环查询结果

BigQuery:使用子查询和内部联接的计数更新行

没有聚合或子查询的查询