3 返信 最新の回答 日時: Apr 4, 2010 8:22 AM ユーザー:Hiro

    重複したレコードを効率よく削除する方法

    tomohiroyoshida

      タイトル

      重複したレコードを効率よく削除する方法

      フォーラムに投稿

      みなさんこんにちは。 Filemaker pro10 advanced, Windows XPの環境です。

       

      レコードのインポート後に重複がたくさん出来てしまった場合、それを効率よく削除する方法はないでしょうか? 

       

      (重複をさけるため、次回からインポートする際は、過去のテーマ『インポートの件』でHiroさんが回答されたようなやり方でやらねばと思ってます。)

       

        • 1. Re: 重複したレコードを効率よく削除する方法
          Hiro
            

          以下の方法は如何でしょう? 

          重複テーブルの複製テーブルを作り、重複テーブルのデータを全て消去、

          重複フィールドの設定をユニーク値のみ入力制限(■常時制限、指定)へ変更してから、

          先の複製テーブルからインポートするとユニークレコードだけがインポートできます。

          結果検証してみて重複制限付きインポートに問題がなければ複製テーブルを削除して完成です。

          • 2. Re: 重複したレコードを効率よく削除する方法
            TailCapeT
              

            重複しているデータと認識するための固有値は有りますか?

            有るのでしたら、以下の方法が取れます。

             

            FIleMaker Fun Night!というイベントで茂田さんが教えてくださったテクニックです。

            http://web.sevensdoor.com/events_browse.xsl?report=34 

             

            そのレコードが重複なのかどうかを示す計算フィールドを作る方法です。

             

            1)固有値で自己リレーションを張ります。

            2)計算フィールド「チェック用レコードID」を作ります

             計算式:Get ( レコードID ) 

            3)計算フィールド「重複チェック」を作ります

             計算式:Case ( チェック用レコードID = 自己リレーション::チェック用レコードID ; 0 ; 1)

              ※このフィールドが重複しているレコードの二つ目以降が1 を、重複している一つ目か重複していないレコードは0を返すようになります。

            4)重複チェックフィールドを1で検索、削除

             ※索引が無いフィールドですので検索に時間がかかるかと思います。 

             

            応用範囲がとても広いテクニックで、重宝してます。

            • 3. Re: 重複したレコードを効率よく削除する方法
              Hiro
                

              先のインポートを使う方法にかわり、値一覧とリレーション機能を利用する別法をご紹介します。

               

              ユニーク値だけのレコードIDリストを値一覧機能で作り、その「ユニーク値IDリスト」と「レコードID」

              との<>照合で自己リレーションを張ります。その「関連レコードへ移動」で対象レコードを抽出して

              それを削除して完成です。

               

              1.「レコードID」名で計算(式=Get(レコードID))フィールドを作ります。

              2.「ユニーク値IDリスト」名の値一覧を作り、以下を設定します。

                 ・値フィールドに、「レコードID」フィールドを指定。

                 ・第2表示フィールドに、「固有値」フィールドを指定。

                 ・ソートフィールドに、第2表示「固有値」フィールドを指定。

              3.「ユニーク値IDリスト」名で計算フィールドを作り、以下を指定します。

                 式(計算結果:非保存)= ValueListItems(Get(ファイル名);"ユニーク値IDリスト")

              4.「重複レコード」名の自己リレーションを張り、以下の照合条件を設定します。

                 「ユニーク値IDリスト」 <> 「::レコードID」  // <>は not=

              5.スクリプト「関連レコードへ移動」に以下設定をして、実行します。

                 ・関連レコード取得元:「重複レコード::」

                 ・表示レイアウト:<現在のレイアウト>

                 ・■関連レコードのみ表示、対象レコードのみ照合

              6.5で得られた重複レコードセットを対象レコードにレコード削除して、完成です。

               

              なお、5と6をスクリプトボタンにセットしておけば、必要な時にボタン一発で重複削除できます。