• 締切済み

AccessでのDISTINCTROW 、DISTINCTの使い方

Accessを勉強中です。 入力したデータ(テキストファイルのインポート)の重複除去として、 クエリに登録したデータフィールドすべてに対し、GroupByを実施しております(合計とか、平均とかは選択していない、単純に GroupBy)。 その一方で、最近、DISTINCTROW、DISTINCTを知りました。 DISTINCTROW ---クエリのプロパティで「固有のレコード」Yes DISTINCT-------クエリのプロパティで「固有の値」Yes DISTINCTROW、DISTINCTも、クエリのデータフィールドに登録した ものだけの話であろうと、考えているのですが、明確には理解できていません。 特に「固有のレコード」とは、何をいっているのか、分かりません。分かりやすく解説していただけないでしょうか? また、データの重複を除去する方法としてのDISTINCTROW、DISTINCTは、 一般的な方法なのでしょうか? 以上、宜しくお願いいたします。

noname#95859
noname#95859

みんなの回答

回答No.1

こちらが参考になるかも知れません。 http://makotowatana.ld.infoseek.co.jp/access/dasqlalldistinct.htm

noname#95859
質問者

お礼

教えていただいたサイトでの情報から、更に1歩進むことができ、 本件、解決しました。DISTINCTROWは、「もし、レコード全体を裏で見て それが重複していないのであれば、目の前のクエリの結果が、一見、重複していたとしても、重複を許して、そのまま表示する」と言うものなのですね。 これが、DISTINCTだと、とにかく重複していれば、消す。有無を言わさず消す。  また、宜しくお願いいたします。

noname#95859
質問者

補足

早速の回答ありがとうございます。 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の違いは何なのか? と言う疑問が出てきてしまいます。 宜しくお願いいたします。

関連するQ&A

  • DISTINCTについて

    こんにちは。質問させて下さい。 重複レコードを除くデータを取得する際、 DISTINCT キーワードを使用しますが 重複レコードを取得したい場合はどのようにすれば よいのでしょうか? 宜しくお願いいたします。

  • Access2000で重複データに・・・

    Access2000の重複データの処理について質問です。 あるフィールドの重複レコードを検索し、該当するレコードの別フィールドに「●」をつけようとしています。ただ、重複する最初のレコードには「●」をつけたくないのです。 例えば  aaa ・・・ (1)  bbb  aaa ・・・ (2)  ccc  aaa ・・・ (3)  eee というフィールドだった場合、(1)には「●」をつけずに(2)以降にのみつけたいのです。 重複クエリで重複レコードを抽出して重複テーブル作成→重複テーブルと元テーブルを組み合わせて更新クエリ作成という方法でやったのですが、そうすると(1)にも「●」がついてきます。(当然ですが・・・) 何か名案があれば教えてください。 やはり、VBAを使わないと無理でしょうか・・・?

  • Access97のクエリーについて

    Access97のクエリーで次のようなデータ抽出をしたいのですが、設定方法が良く分かりません。 1.約20000レコードのCSVファイルを外部データ   のインポートでTDLを作成。 2.重複クエリーを走行すると、約10000レコードが   重複していた。 3.作成したTBLから重複者がいないデータを抽出した   い。 イメージ: 処理前  a,2222,111,1,1234567  a,1111,100,1,0001234  b,0001,234,1,5555511  c,0003,001,1,0005555  c,0005,201,1,3345678  ↓(クエリー) 処理後  a,1111,100,1,0001234  b,0001,234,1,5555511  c,0003,001,1,0005555 どのような、関数、クエリーを使えば実現できるのでしょ うか。ご教示の程よろしくお願いします。

  • ACCESSでの重複レコードの削除

    ACCESSで、重複レコードを引っ張ってくるのは、重複クエリでやれましたが、逆に、重複レコード(1つのフィールド、或いは複数のフィールドに着目しての)の削除は、やれないのでしょうか? イメージしているのは、エクセルのオートフィルタでの「重複データの削除」です。 よろしくお願い致します。

  • アクセスのクエリで

    あるテーブルはエクセルからインポートしていますが、全てのフィールドが空白というレコードが多数存在します。 これをクエリで(他に方法があればどの様な方法でもよいです)全てのフィールドが空白のレコードは表示しない様にする事はできますか? これを更新クエリにして、新しく全て空白のフィールドのレコードが無いテーブルを新たに作ろうと考えています。 教えて下さい。よろしくお願いします。

  • Accessの重複データ除外について

    Accessクエリで重複データをしようとしていますが、 プロパティで固有の値を「はい」に指定したり、集計項目をグループ化したりすると データの順序が変わってしまいます。(昇順に並び変わってしまいます。) データの順序を変えずに重複データを除外する方法を教えてください。

  • Select Distinctについて

    SQL文の質問です。フィールドがTable1に100つあるとします。 select distinct XYZ From Table1という文があるとします。 これだとXYZのフィールドしか参照していないことになると思います。 そうではなくて、他の99フィールドの値も参照(データにアクセスしたい)したいと思っています。 select distinct XYZ, * From Table1とSelect * from Table1みたいなことをやりましたがエラーが発生しました。他の99フィールドを参照する方法はあるでしょうか?

  • 特定のレコードのみの更新クエリ

    過去ログより、項目の更新クエリはありましたが、 特定のレコードの更新方法はどう考えればいいのかアドバイスください。 テーブルには、毎月あたらしいデータがインポートされていきますが、 前月と比べて同じレコードは削除して常に新しいレコードにしておきたいのですが、これは一旦、重複クエリで重複レコードすべて削除してから新しいデータをインポートする2段階の方法をとるしかないのでしょうか?

  • Accessの重複データ非表示について

    Accessのクエリで重複データを非表示にする際、「クエリプロパティ」シートで「固有の値」を「はい」に変更しても上手くいきません。 この場合、どういう原因が考えられますか? アドバイスをよろしくお願いします。

  • ACCESS2000でのレコード抽出

    OS:WindowsXP ACCESS2000 あるフィールドの値が最大となるようなレコードを選択クエリで 抽出しようとしているのですがうまくいきません。 テーブルのフィールドは4個あります。 テーブル [系列] [優先度] [データ1] [データ2] ここで各系列ごとに優先度が最大となるレコードのみを 抽出したいのです。 系列、データ1、データ2は重複がありえます。 優先度は系列を跨いだ重複はありますが、 同系列内での重複はありません。 レコードの例) 1:系列A 優先度1 データA データB 2:系列A 優先度2 データC データD 3:系列B 優先度1 データE データF 上記の例で言いますと、レコード2:とレコード3:のみを 抽出するクエリを作成したいのです。 集計クエリで優先度のフィールドを「最大」にしても、 3つのデータ全てが抽出されてしまいます。 どなたか解決策をご教示ください。

専門家に質問してみよう