2013-04-05 38 views
0

也许这比需要更复杂,或者更简单。无论哪种方式,它一直在推动我坚果,我真的很感激任何帮助。从查询中更新一个访问表

我试过搜索谷歌和堆栈溢出,以及一个Safari书上访问没有成功,但也许我只是不能清楚地定义我想要足以找到它。

我在Access中创建数据库。因此,到目前为止,我有2个表: 区域信息 区信息

区域信息具有具有对哪个区域属于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)); 

太糟糕了,这一个不工作。

最后,它需要更新该列中正确的行。

如果有人能帮我清楚这一点,我将不胜感激。我一直在想我能想到的所有事情,而我的谷歌搜索软件对我来说已经变得柔软了。

谢谢!

+0

我想我可能需要使用“加入”,但我只是很困惑这个... – 2013-04-05 23:32:30

回答

1

关系数据库设计中的核心概念之一是标准化,这是一个奇怪的词,用来表示“不要在多个地方写下”同一条信息。

认为您想要在[区域信息]表格中存储每个区域的“区域数量”,但您已在[区域信息]表格中记录了这些信息。你只需要一个方便的方式将其拉出。

正如你猜到了,一个聚合(GROUP BY)查询答案,一个是这样的...

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中将该查询保存为“AreaCountsByZone”,那么您可以在您构建的其他查询中使用该查询,就像一样,例如查询显示的区域数为在[区域信息]表格本身中存储计数 ...

SELECT [Zone Information].Abbreviation, [Zone Information].[Zone Name], 
    AreaCountsByZone.[Number of Areas] 
FROM AreaCountsByZone INNER JOIN [Zone Information] 
    ON AreaCountsByZone.Zone = [Zone Information].Abbreviation; 

...返回...

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]; 

...产生完全相同的结果。

+0

感谢您的答复!我曾经想过几次,“为什么我要像这样构造它?”尽管这可能是我没有,因为它是一个查询想到(不知何故,我从我简单的MySQL工作,并使用访问在翻译中失去了这一点)。我唯一的问题可能是这样的:每个区域都有一个名称以及缩写。有没有一种方法(除了在区域信息表中存储名称和缩写)将每个缩写链接到名称?再次感谢! – 2013-04-06 20:03:33

+0

@TeddJohnson在我的回答中注意到,我*有* [缩写]和[区域名称]列有[区域信息]表。 [区域名称]属于该表格,因为* Normalization *表明您只在一个位置([Zone Information]表格中的一条记录)“写下”区域的名称,而不是在[地区信息]表。这与“区域数量”情况不同,您必须在[区域信息]表格中将区域与区域关联起来,因此将COUNT()存储在[区域信息]表格中将是多余的。 – 2013-04-07 13:04:57

+0

@TeddJohnson另外,请记住,在某些特定情况下,可能需要一定数量的*非规范化*。例如,如果您的[区域信息]表是**巨大的**,并且您发现由于重复计算COUNT()值而导致事件陷入停滞状态,那么可能会导致您考虑实际存储区域计数区域表。但是,Access不提供某些高级功能(例如'TRIGGER')来帮助管理这类情况,所以在采取此类行动之前请仔细考虑。 – 2013-04-07 13:13:44