MS Access SQL 如何消除重复值

Posted

技术标签:

【中文标题】MS Access SQL 如何消除重复值【英文标题】:Ms Access SQL How to eliminate duplicate values 【发布时间】:2019-10-24 19:14:18 【问题描述】:

我在这里查看了很多看起来相似的帖子,以至于我头晕目眩,但似乎没有一个解决这个特定问题,但这可能是我不明白答案。 由于 c 表的连接,下面的查询会产生带有重复 s.ID 记录的结果。消除结果集中具有重复 s.ID 值的行的最佳方法是什么?我更愿意用 MAX(c.ID) 保留那些重复的记录并消除其他记录。

Select (o.fld1 & ' ' & o.fld2) as Name, 
  g.name, 
  (Select Count(*) from sd where s.ID=sd.ID) as TheCount, 
  sm.*, 
  l.name, 
  t.name, 
  s.ID, 
  s.name, 
  c.ID
From ((((((
  s Inner Join c on s.fld2=c.fld2) 
  Inner Join o on s.oID=o.ID) 
  Inner Join g on s.gID=g.ID) 
  Left Join sm on s.smID=sm.ID) 
  Inner Join l on s.lID=l.ID) 
  Inner Join t on s.tID=t.ID) 
Where c.fld3 IN (1,3,5)
Order By s.ID ASC, c.ID ASC

这是一种简化,但我认为它涵盖了所有核心元素。例如,select 子句有更多的项目,但至少有一个嵌入式 SQL 查询和一个构造字段名称和一个 'table.*',如示例中所示;根据用户定义的过滤条件,Where 子句可能要复杂得多。

示例结果行可能是:

s.ID    c.ID   ...
1       1
1       3
2       3
2       5

我希望结果集中不返回第 1 行和第 3 行。将具有 MAX(c.ID) 的行保留在重复的 s.ID 行上。

【问题讨论】:

删除重复项是指从数据库中删除一些记录,还是只是避免显示重复项?另外,什么是重复的?一切都不可能,因为 c.ID 被标识为一个字段,该字段因结果记录而异。 从该查询的结果集中删除具有重复 s.ID 值的行。 s表记录重复。 【参考方案1】:

您可以检查您的 where 子句中是否不存在具有更高 c.ID 值的 s-c 对

Select (o.fld1 & ' ' & o.fld2) as Name, 
  g.name, 
  (Select Count(*) from sd where s.ID=sd.ID) as TheCount, 
  sm.*, 
  l.name, 
  t.name, 
  s.ID, 
  s.name, 
  c.ID
From ((((((
  s Inner Join c on s.fld2=c.fld2) 
  Inner Join o on s.oID=o.ID) 
  Inner Join g on s.gID=g.ID) 
  Left Join sm on s.smID=sm.ID) 
  Inner Join l on s.lID=l.ID) 
  Inner Join t on s.tID=t.ID) 
Where not exists (select 1 from s s2 join c c2 on s2.fld2=c2.fld2 WHERE s2.ID=s.ID and c2.ID>c.ID and c2.ID IN (1,3,5))
Order By s.DateAndTime ASC, s.fld9 ASC, c.fld4 ASC

【讨论】:

我收到“查询表达式中的语法错误”,它正在标记上面的整个 Where 子句。 好的,我按照你的想法运行,并将你的“不存在”子句更新为“(select 1 from s s2 join c c2 on s2.fld2=c2.fld2 WHERE s2.ID=s.ID和 c2.ID>c.ID 和 c2.ID IN (1,3,5))" 并且有效!但在小型测试数据库上,执行时间从 2 秒变为 16 秒。哎呀。没有布埃诺。 @JJJones_3860 在这种情况下索引某些字段可能会有所帮助。 你是正确的拉霍斯! c.fld2 未编入索引。一旦我索引它,处理时间从最初的 2 秒变为 3 秒(大约)。这是完全可以接受的。谢谢 它不会让我检查答案。它说它被锁定,除非你先编辑你的答案。

以上是关于MS Access SQL 如何消除重复值的主要内容,如果未能解决你的问题,请参考以下文章

自动将新数据从 MS Access 数据库导入 SQL Server

MS Access SQL 多个 JOIN 和 WHERE 子句

MS-Access 中的多个日期范围

MS Access 中多值字段的替代方案

将日期插入 Ms-Access 数据库的问题

将数据从 MS Access 传输到 SQL Server