Ms Access SQL如何消除重复值

Ms Access SQL如何消除重复值,sql,ms-access-2007,Sql,Ms Access 2007,我在这里查阅了太多类似的帖子,让我头晕目眩,但似乎没有一篇能够解决这个问题,但这可能是因为我不理解答案。 由于c表上的连接,下面的查询生成了具有重复s.ID记录的结果。消除结果集中具有重复s.ID值的行的最佳方法是什么?我更愿意用MAXc.ID保留这些重复记录,并删除其他记录 Select (o.fld1 & ' ' & o.fld2) as Name, g.name, (Select Count(*) from sd where s.ID=sd.ID) as The

我在这里查阅了太多类似的帖子,让我头晕目眩,但似乎没有一篇能够解决这个问题,但这可能是因为我不理解答案。 由于c表上的连接,下面的查询生成了具有重复s.ID记录的结果。消除结果集中具有重复s.ID值的行的最佳方法是什么?我更愿意用MAXc.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行。将带有MAXc.ID的行保留在重复的s.ID行上。

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


删除重复项是指从数据库中删除一些记录,还是只是避免显示重复项?还有,什么是重复的?由于c.ID被标识为一个不同于结果记录的字段,因此无法对所有内容进行复制。请从此查询的结果集中删除具有重复s.ID值的行。s表记录是重复的。我在查询表达式中发现语法错误,它正在标记上面的整个Where子句。确定,我带着你的想法运行,并更新了你的'not exists'子句,从s2中选择1,在s2.fld2=c2.fld2中选择c2,其中s2.ID=s.ID和c2.ID>c.ID和c2.ID在1,3,5中有效!但在一个小型测试数据库上,执行时间从2秒增加到16秒。哎呀。没有错误。@JJJones_3860为某些字段编制索引在这种情况下可能会有所帮助。你是对的Lajos!c、 fld2未编制索引。一旦我索引了它,处理时间从最初的2秒增加到了大约3秒。这是可以接受的。ThxIt不会让我检查答案的。它说它是锁定的,除非你先编辑你的答案。
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