Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル重複レコードの削除クエリ
記事No42864
投稿日: 2017/12/08(Fri) 11:33
投稿者Empty
解決済: ON
OS:windows7
Access Version:2007
クエリについて質問します。
VBA上でクエリを使って重複データを削除したいです。
特定の四つのフィールドが重複するレコードを削除したいです。
レコード番号が新しいものを削除して最も古いものを一つ残します。
主キーはないです。
重複するレコードを抽出するSQL文は以下になります。
---------------------------------------------------
SELECT フィールド1, フィールド2, フィールド3, フィールド4
FROM テーブル名
GROUP BY フィールド1, フィールド2, フィールド3, フィールド4
HAVING (((Count(フィールド1))>1) AND ((Count(フィールド2))>1) AND ((Countフィールド3))>1) AND ((Count(フィールド4))>1));
----------------------------------------------------
この選択クエリを空白のフィールドがあるレコードも抽出できるようにしたものを削除クエリにしたいです。

タイトルRe: 重複レコードの削除クエリ
記事No42865
投稿日: 2017/12/08(Fri) 13:04
投稿者ナバ
解決済: ON
こんにちは。

GROUP BY をしているクエリーを含んでいると更新(削除も)できないクエリーになります。
停止されたSQLをテーブル作成クエリーに変換し、一時テーブルを作成。
それと元のテーブルで削除クエリーを作る、という方向が
考えられます。

タイトルRe^2: 重複レコードの削除クエリ
記事No42866
投稿日: 2017/12/08(Fri) 13:17
投稿者Empty
解決済: ON
> こんにちは。
>
> GROUP BY をしているクエリーを含んでいると更新(削除も)できないクエリーになります。
> 停止されたSQLをテーブル作成クエリーに変換し、一時テーブルを作成。
> それと元のテーブルで削除クエリーを作る、という方向が
> 考えられます。

ご指摘通り、クエリを選択クエリと削除クエリの二つに分けて選択クエリをテーブルとして削除クエリで削除することに成功しました。
しかし、依然、フィールドに空白があるレコードが抽出できないです。

重複抽出(選択クエリ)
------------------------------------------------------------
SELECT Last(IDフィールド) AS ID, フィールド1, フィールド2, フィールド3, フィールド4
FROM テーブル
GROUP BY フィールド1, フィールド2, フィールド3, フィールド4
HAVING (((Count(フィールド1))>1) AND ((Count(フィールド2))>1) AND ((Count(フィールド3))>1) AND ((Count(フィールド4))>1));
------------------------------------------------------------
重複削除(削除クエリ)
------------------------------------------------------------
DELETE *
FROM テーブル
WHERE (((IDフィールド) In (SELECT 重複抽出.ID FROM 重複抽出 )));
------------------------------------------------------------

タイトルRe^3: 重複レコードの削除クエリ
記事No42867
投稿日: 2017/12/08(Fri) 13:41
投稿者ナバ
解決済: ON
>フィールドに空白があるレコード
フィールド1, フィールド2, フィールド3, フィールド4のいずれかが
空白であるレコード、ということですか。
今の重複抽出(選択クエリ)とは別に、
抽出クエリーを作成して、一時テーブルへのレコード追加クエリーに
してはどうでしょうか。

タイトルRe^4: 重複レコードの削除クエリ
記事No42868
投稿日: 2017/12/08(Fri) 15:16
投稿者Empty
解決済: ON
> >フィールドに空白があるレコード
> フィールド1, フィールド2, フィールド3, フィールド4のいずれかが
> 空白であるレコード、ということですか。
> 今の重複抽出(選択クエリ)とは別に、
> 抽出クエリーを作成して、一時テーブルへのレコード追加クエリーに
> してはどうでしょうか。
すみません、自己解決しました。
頭の悪いSQL文になりましたがなんとかなりました。
-----------------------------------------------------
SELECT Last(整理.ID) AS ID, 整理.注文書番号, 整理.追跡番号, 整理.入荷数, 整理.入荷日
FROM 整理
GROUP BY 整理.注文書番号, 整理.追跡番号, 整理.入荷数, 整理.入荷日
HAVING (((Count(整理.注文書番号))>1) And ((Count(整理.追跡番号))>1) And ((Count(整理.入荷数))>1) And ((Count(整理.入荷日))>1)) Or (((Count(整理.注文書番号))>1) And (整理.追跡番号 Is Null) And ((Count(整理.入荷数))>1) And ((Count(整理.入荷日))>1)) Or (((Count(整理.注文書番号))>1) And ((Count(整理.追跡番号))>1) And (整理.入荷数 Is Null) And ((Count(整理.入荷日))>1)) Or (((Count(整理.注文書番号))>1) And ((Count(整理.追跡番号))>1) And ((Count(整理.入荷数))>1) And (整理.入荷日 Is Null));
------------------------------------------------------
ありがとうございました。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る