我最近一直在学习MySQL和SQL,但我不得不使用MS Access。我已经用我的SQL知识成功地定制和创建了查询,但是现在我被卡住了。我仍然在努力学习更多关于在查询中正确连接表的知识,根据我到目前为止的经验,MS Access并没有让这件事变得更容易。
我有5个要查询的表。Table1 (也称为“munic.ID”的"munic“)是包含关键字的表,该关键字将名称连接到接下来的4个表。表2-4都包含多个唯一记录,这些记录与Table1中的单个条目相关。当我使用Table1将每个表作为一对进行查询时,我会得到所需的结果。但是,当我尝试一起查询表1-4时,我得到的条目是表1-4的4倍(如在中一样,Table2记录在结果电子表格中出现的次数要多3到6次)。这也是有问题的,因为我试图为表2-4中的数据值找到一个总和,对于4倍的记录,我的总和是4倍。
注意:与Table1中的键关联的每个表没有偶数个记录(Table2有35个条目,Table3有12个条目,依此类推)
示例数据:
Table1
ID municipalities county population website
1 Anson Somerset 2452 ansonmaine.town
2 Arrowsic Sagadahoc 440 arrowsic.org/recycling
Table2
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 45 1 2017 594 0 Maine
2 28 1 2017 4 Maine
因此,下面是我一直在处理的查询:包含2个表的查询,提供准确的结果(哇!)
SELECT DISTINCT
Table1.municipalities,
Table2.[report-year],
Sum(Table2.tons) AS [disp-tons],
Sum(Table2.[cubic-yards]) AS [disp-cubic-yards], Count(Table2.ID) AS [disp-no-entries]
FROM Table1 INNER JOIN Table2 ON Table1.ID = Table2.[munic-ID]
GROUP BY Table1.municipalities, Table2.[report-year];
使用所有表进行查询(提供了太多的重复项,这太痛苦了):
SELECT DISTINCT
Table1.municipalities,
[Table2.tons] AS Table2_tons,
Table2.[cubic-yards] AS [Table2_cubic-yards],
Table3.tons AS Table3_tons,
Table3.[cubic-yards] AS [Table3_cubic-yards],
Table4.tons AS Table4_tons,
Table4.[cubic-yards] AS [Table4_cubic-yards],
[Table5].tons AS [Table5_tons],
[Table5].[cubic-yards] AS [Table5_cubic-yards]
FROM (((Table1 LEFT JOIN Table3 ON Table1.[ID] = Table3.[munic-ID]) LEFT JOIN Table2 ON Table1.[ID] = Table2.[munic-ID]) LEFT JOIN Table4 ON Table1.[ID] = Table4.[munic-ID]) LEFT JOIN [Table5] ON Table1.[ID] = [Table5].[munic-ID]
ORDER BY Table1.municipalities;
如果有什么建议可以让我在查询Table1.City和连接Table1 ID时不会得到重复的条目,那将是非常有帮助的。我尝试对查询中的数据进行分组,但MS要求将所有内容分组,而不仅仅是一个字段。我也做过数学计算,当我尝试对我选择的值进行求和时,我得到的总和大约是应该值的4倍。
预期结果:
municipalities recycle_tons recycle_cubic-yards disposal_tons disposal_cubic-yards reuse_tons reuse_cubic-yards ben-use_tons ben-use_cubic-yards
Anson 2017 114 2 598 0 0 0 0 0
Anson 2016 66 3 946 0 0 0 0 0
Arrowsic 2017 59 0 121 0 0 0 23 0
Arrowsic 2016 0 0 121 0 0 0 23 0
Auburn 2016 0 0 21428 0 0 0 1538 0
实际结果:
municipalities report-year recycle_tons recycle_cubic-yards disposal_tons disposal_cubic-yards reuse_tons reuse_cubic-yards ben-use_tons ben-use_cubic-yards
Anson 2016 1 34
Anson 2016 1 157
Anson 2016 1 755
Anson 2016 3 34
Anson 2016 3 157
Anson 2016 3 755
Anson 2016 21 34
Anson 2016 21 157
Anson 2016 21 755
Anson 2016 43 34
Anson 2016 43 157
Anson 2016 43 755
Anson 2016 46 34
Anson 2016 46 157
Anson 2016 46 755
Anson 2017 1 4
Anson 2017 1 594
Anson 2017 3 4
Anson 2017 3 594
Anson 2017 21 4
Anson 2017 21 594
Anson 2017 43 4
Anson 2017 43 594
Anson 2017 46 4
Anson 2017 46 594
Arrowsic 2016 0 121 8
希望有人能帮忙!我渴望学习构建如此复杂的查询的正确方法,因为我经常不得不从几个设计不合理的MS Access数据库编译大量数据(我从前辈那里继承了它们)。
更新:下面是我尝试组合记录的5个表的示例(不是作为行,但每个表都应该作为新列添加--但每个表的记录数量是不均匀的)
TABLE1:
ID municipalities county population website
1 Anson Somerset 2452 ansonmaine.town
2 Arrowsic Sagadahoc 440 arrowsic.org/recycling
3 Auburn Androscoggin 23000 auburnmaine.gov
TABLE2:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
10 1 2 2017 59 Maine
11 20 2 2017 0 Maine
12 21 2 2017 0 Maine
TABLE3:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 45 1 2017 594 0 Maine
2 28 1 2017 4 Maine
3 45 2 2017 121 Maine
TABLE4:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 39 9 2017 280 Maine
2 39 12 2017 74 Maine
3 39 18 2017 3 Maine
TABLE5:
ID waste-ID munic-ID report-year tons cubic-yards dest-fac-ID origin
1 29 7 2017 10 0 Maine
4 7 12 2017 25 Maine
5 35 15 2017 208 Maine
发布于 2018-09-20 07:23:28
假设您在Table2中有2条[munic-id]
为1的记录,在Table3中有3条这样的记录,那么将这3个表连接起来将得到[munic-id]
为1的2x3=6记录的结果。
由于您似乎计划对所有表Table2-5的tons
和[cubic-yards]
求和,按[munic-id]
和[report-year]
分组,我建议在4个单独的查询(Query2-5)中执行此操作,然后连接查询而不是表。由于Table1中的人口可以随着时间的推移而变化,因此我建议也有一个表(munic-pop
),其中包含每个[munic-id]
的[report-year]
人口,这将有助于将年份结合起来。
连接的查询可能如下所示(不再需要分组):
https://stackoverflow.com/questions/52413918
复制相似问题