查询重复记录

时间:2018-09-19 20:41:46

标签: sql ms-access access ms-access-2016

我最近一直在研究MySQL和SQL,但是我不得不使用MS Access。我凭借自己的SQL知识在自定义和创建查询方面取得了巨大的成功,但是现在我陷入了困境。我仍在尝试学习有关在查询中正确连接表的更多信息,根据到目前为止的经验,MS Access并没有使它变得任何简单。

我要查询5个表。 Table1(又称“ munic.ID”,又称“ munic”)是包含将名称连接到接下来的4个表的键的表。表2-4全部包含与表1中的单个条目相关的多个唯一记录。当我将每个表与Table1仅作为一对查询时,我得到的正是我需要的结果。但是,当我尝试一起查询Tables1-4时,我得到的条目数是原来的4倍(例如,Table2记录在结果电子表格中的显示次数要多3至6次)。这也是有问题的,因为我正在尝试为Tables2-4中的数据值求和,并且记录的4倍时,我的总和要大4倍。

注意:每个表中与表1中的键相关联的记录没有偶数(表2具有35个条目,表3具有12个条目,等等)

样本数据:

select
    a.patient_id as id1,
    b.patient_id as id2,
    a.person_name
  from my_table a
  join my_table b on a.patient_id = b.related_patient_id
                 and b.patient_id = a.related_patient_id
                 and a.product <> b.product
                 and a.patient_id < b.patient_id

因此,这是我一直在处理的查询: 用2个表查询,提供准确的结果(woo!)

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

查询所有表(提供太多重复项,这很痛苦):

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

如果对如何使用它有任何建议,那么当我查询Table1.municipality并加入Table1 ID时,我不会重复输入,这将非常有帮助。我曾尝试对查询中的数据进行分组,但MS要求对所有内容进行分组,而不仅仅是一个字段。我也已经完成了数学运算,当我在选择值时尝试对我的值求和时,我得到的总数应该是它的4倍。

预期结果:

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;

实际结果:

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

希望有人可以提供帮助!我渴望学习正确的方法来构建这种复杂的查询,因为我经常不得不从几个不合逻辑的MS Access数据库中编译大量数据(我是从以前的数据库继承过来的)。

更新: 下面是我尝试合并记录的5个表的示例(不是行,但是每个表都应添加为新列-但每个表的记录数并不均匀)

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   

1 个答案:

答案 0 :(得分:0)

让我们假设您在Table2中有2条记录,其中[munic-id]为1,而在Table3中有3条记录,那么将所有3个表联接在一起将得到2x3 = 6条记录,结果为[munic-id] 1.

由于您似乎计划对所有表{Table2-5}的tons[cubic-yards]进行汇总,并按[munic-id][report-year]分组,因此我建议在4中这样做分别查询(Query2-5),然后联接查询而不是表。由于表1中的人口会随着时间而变化,因此我建议也有一个表(munic-pop),其中包含每个[munic-id]的{​​{1}}的人口,这将有助于加入年份。

加入的查询可能看起来像这样(不再需要分组):

munic-query