第119回 重複したレコードを検索する

こんにちは。エヌ・ケイ・カスタマイズの永尾です。

今年も富士山の初冠雪のニュースを聞いたり、我が家の衣替えも終わって、いよいよ冬に向けての準備が整い始めてきました。夏の暑い日には本当に冬が来るのかと思う程暑いですが、季節はちゃんと巡ってくるのだなと、毎年秋になるとちょっと不思議な気持ちになります。


以下の記事は、Claris FileMaker 関数・スクリプトガイド(バージョン 19 対応)より、
「32.重複したレコードを検索する(856ページ)」を元に掲載しています。

この文献から、オカレンスの仕様をうまく活用し、計算式による重複の取得を学習することができました。文献の執筆者、関係者の方々に深謝いたします。

なお、このブログ記事の趣旨は、弊社所属スタッフの Claris FileMaker 学習の成果を公開することを目的とし、同時に、参考文献の内容の紹介に資するものであることを Claris International Inc. が確認しています。

Claris FileMaker 公式トレーニング教材



さて、今回は「重複したレコードを検索する」です。入力値の制限を行っていても、設定によっては重複してはいけないフィールドの値が重複してしまうことがあります。値が重複してしまったレコード(同じ値を持つ2番目以降のレコード)を抽出する方法をお伝えしたいと思います。

考え方

重複したフィールドを照合フィールドに設定して、自己連結リレーションシップを作成します。

このとき、フィールド値が重複していなければ自分自身とリレーションが成立するため、リレーション先のレコードと主キーの値は同じです。一方、フィールド値が重複していると、同じ値を持ち、かつ主キーの値が異なるレコードともリレーションが成立します。

関連レコードと主キーの値が異なる場合にフラグが立つフィールドを作成しておくと、このフィールを検索することによって重複したレコードが抽出できます。

実装

(1)フィールド値に重複があるテーブルがあったとします。

・この例では、「会員番号」フィールドの値が重複しています。

(2)自己連結リレーションシップを作成します。

・テーブルオカレンスを複製します。

・「会員番号」フィールド同士で[=]演算子の自己連結リレーションシップを作成します。

(3)重複フラグの計算フィールドを作成してレイアウトに配置します。※ここでは「flg重複」というフィールドを作成

・自テーブルの主キーと自己連結リレーションシップ先の主キーを比較します。ここではGetAsBoolean関数を使用して結果が真偽(1か0)で返るよう設定します。

・作成した計算フィールドをレイアウトに配置します。

実行例

(A)検索を行なっていないとき:

画面にはすべてのレコードが作成順に表示されています。

(B)「会員番号」に重複検索([!]演算子)を行ったとき:

画面には「会員番号」フィールドの値が重複したレコードが表示されますが、どれが重複したレコード(2番目以降)か分かりません。

(C)「会員番号」でレコードをソートしたとき:

2件目のレコードのフラグフィールドの値が[1]になっていることが確認できます。

まとめ

いかがでしょうか?

1件目のレコードのフラグフィールドの値が「0」、2件目以降のレコードのフラグフィールドの値が「1」ということになりますので、3件目は「1」ということになります。

重複するフィールドについてはよく出てくると思います。そんな時の考える一助になれれば嬉しいです。


参考文献: Claris FileMaker 公式トレーニング教材 から、「Claris FileMaker 関数・スクリプトガイド」等を参考にしています
https://content.claris.com/fmb19_reg-ja