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

时间:2015-07-29 09:10:20

标签: sql ms-access sql-update ms-access-2013 dcount

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

我有两张桌子:

Table1包含字段(即customer, product, price, count

Table2包含字段(即customer, product, description

我现在需要使用表2中匹配条目的数量更新表1中的字段“count”。这两个表需要通过“customer”和“product”连接。

我的想法是这样的:

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中匹配条目的数量更新“count”列。

1 个答案:

答案 0 :(得分:2)

创建一个包含计数的临时表:

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