Sql 如何从Access中的重复子查询中删除?
我在Access中有一个查找重复记录的查询。我想删除它们。我认为最好的方法是使用DELETE子查询,但我所做的一切似乎都不起作用 我查找重复项的查询是: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
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。