2017-01-10 33 views
0

我在Access中有一個查詢,查找重複的記錄。我想刪除它們。我認爲最好的辦法是使用DELETE子查詢,但我沒有做任何事情似乎可行。如何從Access中的重複子查詢中刪除?

我尋找重複的查詢是:

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; 

還有更多的領域,雖然和主鍵。我嘗試的任何語法似乎都沒有做到我想要的。我怎樣才能做到這一點?

+0

你嘗試過什麼,到目前爲止,你得到了什麼樣的錯誤?此外,如果我們知道表格的外觀以及是否有任何FKC需要知道,那麼這將會容易得多。 –

+2

您打算刪除所有返回的記錄嗎?還是您想要保留每個重複集合中的一個? – Stephen

+0

@LudvigRydahl我試圖創建一個DELETE子查詢。所以我不再擁有它,因爲它不起作用。 這只是刪除databasename(子查詢)結果。 – rohanharrison

回答

0

最好的方法是在不同於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 ... 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; 

笨拙,但它的作品...

馬爾科理智

+0

哇。這是瘋狂的,但我可以看到它的工作... 我沒有很多的選擇,但不幸的是使用Access。 – rohanharrison