首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查询重复记录

查询重复记录
EN

Stack Overflow用户
提问于 2018-09-20 04:41:46
回答 1查看 55关注 0票数 0

我最近一直在学习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个条目,依此类推)

示例数据:

代码语言:javascript
复制
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个表的查询,提供准确的结果(哇!)

代码语言:javascript
复制
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];

使用所有表进行查询(提供了太多的重复项,这太痛苦了):

代码语言:javascript
复制
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倍。

预期结果:

代码语言:javascript
复制
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

实际结果:

代码语言:javascript
复制
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个表的示例(不是作为行,但每个表都应该作为新列添加--但每个表的记录数量是不均匀的)

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 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]人口,这将有助于将年份结合起来。

连接的查询可能如下所示(不再需要分组):

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52413918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档