最好在与 Access 不同的数据库上尝试此操作,您将在此答案中看到原因。但是你问的是 Access,所以这里是:
所以我们有这张表,其中包含两次 Mister Dent 和 Ms McMillan:
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');
我想您不想同时删除每个 Mr. Dent 或 Ms. McMillan 的出现,但保留其中一个副本。
独立于数据库,您不能只删除两个相同行中的一个。 (奇怪的是你应该有一个主键;你永远不会有两个相同的行和一个有效的主键)。
在更好的数据库中,您会:
ALTER TABLE work RENAME TO work_with_dups;
CREATE TABLE work AS SELECT DISTINCT * FROM work_with_dups;
DROP TABLE work_with_dups;
但您无法使用 Access。我建议你在有限的可能性下尽量模仿上述方法。
不能重命名,也不能 CREATE TABLE ... AS SELECT。所以让我们创建一个与第一个结构相同的新表,并用所有work 表填充它:
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_with_dups 的重复数据内容填充它:
INSERT INTO work SELECT DISTINCT * FROM work_with_dups;
最后我们收拾残局:
DROP TABLE work_with_dups;
笨拙,但它有效......
理智的马可