- 締切済み
AccessでのDISTINCTROW 、DISTINCTの使い方
Accessを勉強中です。 入力したデータ(テキストファイルのインポート)の重複除去として、 クエリに登録したデータフィールドすべてに対し、GroupByを実施しております(合計とか、平均とかは選択していない、単純に GroupBy)。 その一方で、最近、DISTINCTROW、DISTINCTを知りました。 DISTINCTROW ---クエリのプロパティで「固有のレコード」Yes DISTINCT-------クエリのプロパティで「固有の値」Yes DISTINCTROW、DISTINCTも、クエリのデータフィールドに登録した ものだけの話であろうと、考えているのですが、明確には理解できていません。 特に「固有のレコード」とは、何をいっているのか、分かりません。分かりやすく解説していただけないでしょうか? また、データの重複を除去する方法としてのDISTINCTROW、DISTINCTは、 一般的な方法なのでしょうか? 以上、宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- p-applepie
- ベストアンサー率53% (156/290)
回答No.1
こちらが参考になるかも知れません。 http://makotowatana.ld.infoseek.co.jp/access/dasqlalldistinct.htm
お礼
教えていただいたサイトでの情報から、更に1歩進むことができ、 本件、解決しました。DISTINCTROWは、「もし、レコード全体を裏で見て それが重複していないのであれば、目の前のクエリの結果が、一見、重複していたとしても、重複を許して、そのまま表示する」と言うものなのですね。 これが、DISTINCTだと、とにかく重複していれば、消す。有無を言わさず消す。 また、宜しくお願いいたします。
補足
早速の回答ありがとうございます。 DISTINCTに関しては、大方、理解できていると思います。 即ち、Selectの結果として得られた、全く同じ行を省くもの。 つまり、目で見える結果の明らかな、重複を省くというもの。 しかし、DISTINCTROWに関しては、よく分からない・・・ 基本的に、データベースに取り込む時に、主キーが自動的に 割り振られ、レコードとして絶対に重複しないようななっているのが データベースだと思います。 http://makotowatana.ld.infoseek.co.jp/access/dasqlalldistinct.htm でも、「フィールドの重複のみでなく、レコード全体で重複しているデータを除外します。」と書かれています。もうこの段階で、理解できません。 意図的に、同じレコードを10行データベースに取り込みました(tab delimita のテキストファイルをimport)。 取り込んだ時点で、Accessは勝手に、IDなるものを付与し、レコードとしては、10行、別々の物となっています(Tableで見る上では)。 このテーブルに対し、ID以外の全fieldをクエリに登録し、DISTINCTROWを実施しても、10行が表示されます(目で見えるのは、全く10行とも同じ内容です)。DISTINCTROWではなく、DISTINCTを実施すると、1行だけとなります。 つまるところ、下記の記述が理解できないのです。 「DISTINCTROW 述語は、クエリで使用するすべてのテーブルからではなく、一部のテーブルからフィールドを選択した場合のみ有効です。このため、クエリの中にテーブルが 1 つのみしかない場合、またはすべてのテーブルからフィールドを出力する場合は、DISTINCTROW 述語は無視されます。」 仮に、そうだ、そうだとして、その時、DISTINCTとDISTINCTROWの違いは何なのか? と言う疑問が出てきてしまいます。 宜しくお願いいたします。