Ms access 从查询更新一个访问表

Ms access 从查询更新一个访问表,ms-access,Ms Access,也许这比需要的更复杂,或者更简单。不管怎样,这都让我发疯,我真的很感激任何帮助 我曾尝试搜索google和stack overflow,以及一本关于Access的Safari书籍,但都没有成功,但也许我只是无法清楚地定义我想要什么来找到它 我正在Access中创建一个数据库。到目前为止,我有两张表: 区域信息 区域信息 区域信息有一个表,表中有一个“区域”列,该列的缩写为2个字母,表示它所属的区域。(示例:AA、GB、DT) 区域信息有一个表,表中有“缩写”和“区域数” 我想要的是(这可能是我完

也许这比需要的更复杂,或者更简单。不管怎样,这都让我发疯,我真的很感激任何帮助

我曾尝试搜索google和stack overflow,以及一本关于Access的Safari书籍,但都没有成功,但也许我只是无法清楚地定义我想要什么来找到它

我正在Access中创建一个数据库。到目前为止,我有两张表: 区域信息 区域信息

区域信息有一个表,表中有一个“区域”列,该列的缩写为2个字母,表示它所属的区域。(示例:AA、GB、DT) 区域信息有一个表,表中有“缩写”和“区域数”

我想要的是(这可能是我完全偏离基准的地方……我以前以为我可以在mySQL中实现它,但我对访问真的很陌生):

我希望能够在任何时候向区域添加新行,这将自动填充该区域中的“区域数”

我认为需要这样做

SELECT Count([Area Information].Zone) AS CountOfZone, [Area Information].Zone
FROM [Area Information]
GROUP BY [Area Information].Zone
从那里开始

HAVING ((([Area Information].Zone)=[Zone Information].Abbreviation));
可惜这个不行

最后,它需要更新该列中的适当行

如果有人能帮我澄清这件事,我将不胜感激。我一直在尝试我能想到的一切,我的谷歌浏览器对我很温柔


谢谢

关系数据库设计的核心概念之一是规范化,这是一个花哨的词,用来表示“不要在多个地方‘写’同一条信息”

您认为您希望在[Zone Information]表中存储每个分区的“区域数”,但您已经在[Area Information]表中“记录”了该信息。你只需要一个方便的方法把它拔出来

正如您所猜测的,聚合(GROUPBY)查询就是答案,像这样的查询

SELECT [Area Information].Zone, Count(*) AS [Number of Areas]
FROM [Area Information]
GROUP BY [Area Information].Zone;
…将产生如下结果:

Zone    Number of Areas
----    ---------------
AB      3
BC      3
NS      1
ON      2
如果您在Access中将该查询保存为“AreaCountsByOne”,那么您可以像在构建的其他查询中使用表一样使用该查询,例如显示面积计数而不实际将计数存储在[Zone Information]表本身中的查询

…它返回

Abbreviation    Zone Name   Number of Areas
------------    ---------   ---------------
AB              Zone AB     3
BC              Zone BC     3
NS              Zone NS     1
ON              Zone ON     2
随着您对SQL的使用越来越熟悉,您可能会发现跳过中间的“保存的查询”更方便,只需一次完成整个过程:

SELECT [Zone Information].Abbreviation, [Zone Information].[Zone Name], 
    (SELECT Count(*) FROM [Area Information]
     WHERE [Area Information].Zone = [Zone Information].Abbreviation
    ) AS [Number of Areas]
FROM [Zone Information];

…这会产生完全相同的结果。

我想我可能需要使用“加入”,但我对此感到非常困惑…感谢您的回复!我想了好几次“为什么我要这样构造它?”我突然想到,因为它是一个查询,所以我可能没有这样做(不知何故,我在翻译时从我简单的MySQL工作和使用access中丢失了这一点)。我唯一的问题可能是:每个区域都有一个名称和缩写。是否有办法(除了在区域信息表中存储名称和缩写)将每个缩写链接到名称?再次感谢@TeddJohnson在我的回答中注意到,我确实有一个带有[缩写]和[区域名称]列的[区域信息]表。[Zone Name]属于该表,因为规范化再次建议您只在一个位置(即[Zone Information]表中的一条记录)“写下”该区域的名称,而不是在[Area Information]表中重复多次。这与“区域数”的情况不同,在这种情况下,您必须将区域与[Area Information]表中的区域相关联,因此将COUNT()存储在[Zone Information]表中是多余的。@TeddJohnson,请记住,在某些特定情况下,可能需要进行一定量的非规范化。例如,如果您的[区域信息]表很大,并且发现由于重复计算COUNTHER()值,事情会陷入停滞状态,那么这可能会导致您考虑实际上在分区表中存储区域计数。但是,Access并没有提供一些高级功能(如
触发器
s)来帮助管理此类案例,因此在采取此类操作之前请仔细考虑。
SELECT [Zone Information].Abbreviation, [Zone Information].[Zone Name], 
    (SELECT Count(*) FROM [Area Information]
     WHERE [Area Information].Zone = [Zone Information].Abbreviation
    ) AS [Number of Areas]
FROM [Zone Information];