人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Access2003】任意の変数(id)の重複を除外したいのですが、

http://q.hatena.ne.jp/1180581937

で重複がわかった"id"にフラグ(例:テーブルの変数名"flg"に1をたてる)をたてた後、重複除外したいと思います。

重複除外の際、id以外の変数での優先順位はありませんので、それをふまえてどうすればよいか教えてください。
(Accessはかなり初心者です)

●質問者: u-chan
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:access フラグ 優先順位 初心者 変数
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kn1967
●27ポイント

『flgフィールドが1であれば削除』ということであれば単純に削除クエリ

DELETE FROM テーブル名 WHERE flg = 1;

で削除してしまえば良いかと思いますが、

そうではなくて、

フラグを立てる所から始めたいという事であれば『何を基準にして残すべき1レコードを指し示すのか』が問題となります。

例えば

no id data date
 1 a aaa 2007/5/1
 2 b bbb 2007/5/1
 3 a ccc 2007/5/2

という元データがあったと仮定してnoの若い方を優先にして重複を消すとすれば

no id data date
 1 a aaa 2007/5/1
 2 b bbb 2007/5/1

が求める答えとなりますし日付優先であれば

no id data date
 2 b bbb 2007/5/1
 3 a ccc 2007/5/2

が求める答えとなります。

といったように求める答えが異なるという事は

『求めるための式(この場合はSQL文)も異なってきます』ので、

質問の際には「元のデータ」と「求めるデータ」を明確に相手に伝えておかないと回答は違った方向に進んでしまうかもしれません。

まずはサンプルを用意してみてください。

◎質問者からの返答

ありがとうございます。

ご指摘の点は理解しています。

(普段は、どの変数のどういう値を優先するか...ということばかりやっていますので)

質問文でも記載したとおり、今回わたしが必要な作業は「単純な重複の削除」になりますので、その部分は無視して結構です。ただし、ご記載のように削除キー(no/date)がないと、作業が返って面倒になるのでしたら、後の"no"を活かした後、"flg"に1を立てることを想定いただければと思います、よろしくお願いします。


2 ● kn1967
●27ポイント

(1)idが同じであればレコードの内容もまったく同じという条件であれば

SELECT DISTINCT *
FROM テーブル名;

というクエリの結果を用いればよろしいでしょう。

(2)レコードの内容は異なるかもしれないけれど、

それらの内容を無視して、idが同じならば、その中のどれでも良いから1件だけを残したいのであれば

SELECT id,FIRST(フィールド名),FIRST(フィールド名),FIRST(フィールド名)
FROM テーブル名
GROUP BY id

というクエリの結果を用いればよろしいでしょう。

とりあえず基本として上記2点をあげましたが、これらはほんの一例に過ぎず

先に回答しましたように「元のデータ」と「求めるデータ」によって調整は多々必要になりますことは再度申し上げておきます。

さらに、noやdateといったような基準が無いということはSQLが各レコードを処理する際に

「残すべきレコードなのかどうかを判断させる材料が無い」という事ですから

データベース設計の際にはユニークキーというものを考慮なされることを強くお勧めします。

(今回の場合であればオートナンバー型のフィールドを追加しておいて

「一番新しく登録されたレコードを残すようにする」とったような対処が今後のためにはよろしいかと思います)


3 ● freemann
●26ポイント

以下のようなSQL文でフラグを立ててそのあと、そのflgの値で削除してすればよろしいかと。削除のSQL文はkn1967さんのを使えばよろしいかと。

---------------------------------------------------

UPDATE テーブル名 SET flg = 1

WHERE フィールド名1 IN (SELECT フィールド名1 FROM テーブル名 GROUP BY フィールド名1 HAVING count(*) > 1);

◎質問者からの返答

皆様、どうもありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ