2017-01-10 11 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とは異なるデータベースでこれを試してみるとよいでしょう。その理由はなぜでしょうか。しかし、あなたが行くので、ここでは、Accessの質問:

だから我々は二回ミスターデントとMSマクミランが含まれ、このテーブルを持っている:

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'); 

私はあなたが各氏の両方の発生を削除したくないと仮定しますDentさんやMcMillanさん。しかし、そのうちの1通を残してください。

データベースとは独立して、2つの同一の行のうちの1つだけを削除することはできません。 (奇妙なことに、プライマリキーを用意する必要があります;あなたは動作するプライマリキーを持つ2つの同じ行を持つことはありません)。優れたデータベースで

、あなたの希望:

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

うわー。これは狂っていますが、私はそれが働いているのを見ることができます... 私は選択のトンを持っていないが、残念なことにアクセスを使用する。 – rohanharrison

関連する問題