最好的方法是在不同於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;
笨拙,但它的作品...
馬爾科理智
你嘗試過什麼,到目前爲止,你得到了什麼樣的錯誤?此外,如果我們知道表格的外觀以及是否有任何FKC需要知道,那麼這將會容易得多。 –
您打算刪除所有返回的記錄嗎?還是您想要保留每個重複集合中的一個? – Stephen
@LudvigRydahl我試圖創建一個DELETE子查詢。所以我不再擁有它,因爲它不起作用。 這只是刪除databasename(子查詢)結果。 – rohanharrison