Sql 如何从Access中的重复子查询中删除?

Sql 如何从Access中的重复子查询中删除?,sql,ms-access,subquery,Sql,Ms Access,Subquery,我在Access中有一个查找重复记录的查询。我想删除它们。我认为最好的方法是使用DELETE子查询,但我所做的一切似乎都不起作用 我查找重复项的查询是: SELECT DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE, count(*) FROM [work] GROUP BY DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE HAV

我在Access中有一个查找重复记录的查询。我想删除它们。我认为最好的方法是使用DELETE子查询,但我所做的一切似乎都不起作用

我查找重复项的查询是:

SELECT DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE, count(*)
FROM [work]
GROUP BY DIVISION, FIPS_COUNTY_CODE, LAST, SUFFIX, FIRST, TITLE, BIRTHDATE
HAVING count(*) > 1;

但是还有更多的字段和主键。我尝试的任何语法似乎都不符合我的要求。我怎样才能做到这一点呢?

最好是在Access以外的数据库上尝试这一点,您将在下面的答案中看到原因。但你要求访问,所以这里是:

我们有一张桌子,里面有登特先生和麦克米兰女士两次:

CREATE TABLE work ( 
  division         INT
, fips_county_code VARCHAR(3)
, last             VARCHAR(10)
, suffix           VARCHAR(3)
, first            VARCHAR(6)
, title            VARCHAR(16) 
, birthdate        DATE
);

INSERT INTO work VALUES(1,'UK' ,'Dent'      ,'','Arthur','Earthling'       ,'1957-08-02');
INSERT INTO work VALUES(1,'UK' ,'Prefect'   ,'','Ford'  ,'HH Guide Scout'  ,'1925-04-01');
INSERT INTO work VALUES(1,'N/A','Beeblebrox','','Zaphod','Galaxy President','1857-09-13');
INSERT INTO work VALUES(1,'UK' ,'McMillan'  ,'','Tricia','Astrophysicist'  ,'1959-09-29');
INSERT INTO work VALUES(1,'UK' ,'Dent'      ,'','Arthur','Earthling'       ,'1957-08-02');
INSERT INTO work VALUES(1,'UK' ,'McMillan'  ,'','Tricia','Astrophysicist'  ,'1959-09-29');
我想你不想删除登特先生或麦克米兰女士的两个副本,而是保留其中一个副本

独立于数据库,您将无法仅删除两个相同行中的一行。(奇怪的是,你应该有一个主键,但是,你永远不会有两个相同的行与工作主键)

在更好的数据库中,您将:

ALTER TABLE work RENAME TO work_with_dups;
CREATE TABLE work AS SELECT DISTINCT * FROM work_with_dups;
DROP TABLE work_with_dups;
但你被困在访问权限中。我建议你在有限的可能性下尽量模仿上面的内容

无法重命名,也无法创建表。。。尽可能地选择。因此,让我们创建一个与第一个表具有相同结构的新表,并用所有
工作
表填充它:

CREATE TABLE work_with_dups( 
  division         INT
, fips_county_code VARCHAR(3)
, last             VARCHAR(10)
, suffix           VARCHAR(3)
, first            VARCHAR(6)
, title            VARCHAR(16) 
, birthdate        DATE
);
INSERT INTO work_with_dups SELECT * FROM work;
现在,我们清洁原来的桌子

DELETE FROM work;
我们用先前保存的
work\u with\u dups
的重复数据消除内容填充它:

INSERT INTO work SELECT DISTINCT * FROM work_with_dups;
最后,我们收拾残局:

DROP TABLE work_with_dups;
虽然很笨拙,但它很有效


理智的马可

到目前为止,你尝试了什么,犯了什么错误?此外,如果我们知道表的外观以及是否有任何FKC需要注意等,这会容易得多。您是否计划删除所有返回的记录,还是希望保留每个重复集中的一个?@LudvigRydahl我已尝试创建一个删除子查询。所以我不再有它了,因为它不起作用了。这只是对databasename(子查询)结果的删除。@Stephen我想删除select.Wow返回的所有记录。这太疯狂了,但我能看到它在工作。。。不幸的是,我没有太多的选择,只能使用Access。