第119回 重複したレコードを検索する
こんにちは。エヌ・ケイ・カスタマイズの永尾です。
今年も富士山の初冠雪のニュースを聞いたり、我が家の衣替えも終わって、いよいよ冬に向けての準備が整い始めてきました。夏の暑い日には本当に冬が来るのかと思う程暑いですが、季節はちゃんと巡ってくるのだなと、毎年秋になるとちょっと不思議な気持ちになります。
さて、今回は「重複したレコードを検索する」です。入力値の制限を行っていても、設定によっては重複してはいけないフィールドの値が重複してしまうことがあります。値が重複してしまったレコード(同じ値を持つ2番目以降のレコード)を抽出する方法をお伝えしたいと思います。
考え方
重複したフィールドを照合フィールドに設定して、自己連結リレーションシップを作成します。
このとき、フィールド値が重複していなければ自分自身とリレーションが成立するため、リレーション先のレコードと主キーの値は同じです。一方、フィールド値が重複していると、同じ値を持ち、かつ主キーの値が異なるレコードともリレーションが成立します。
関連レコードと主キーの値が異なる場合にフラグが立つフィールドを作成しておくと、このフィールを検索することによって重複したレコードが抽出できます。
実装
(1)フィールド値に重複があるテーブルがあったとします。
・この例では、「会員番号」フィールドの値が重複しています。
(2)自己連結リレーションシップを作成します。
・テーブルオカレンスを複製します。
・「会員番号」フィールド同士で[=]演算子の自己連結リレーションシップを作成します。
(3)重複フラグの計算フィールドを作成してレイアウトに配置します。※ここでは「flg重複」というフィールドを作成
・自テーブルの主キーと自己連結リレーションシップ先の主キーを比較します。ここではGetAsBoolean関数を使用して結果が真偽(1か0)で返るよう設定します。
・作成した計算フィールドをレイアウトに配置します。
実行例
(A)検索を行なっていないとき:
画面にはすべてのレコードが作成順に表示されています。
(B)「会員番号」に重複検索([!]演算子)を行ったとき:
画面には「会員番号」フィールドの値が重複したレコードが表示されますが、どれが重複したレコード(2番目以降)か分かりません。
(C)「会員番号」でレコードをソートしたとき:
2件目のレコードのフラグフィールドの値が[1]になっていることが確認できます。
まとめ
いかがでしょうか?
1件目のレコードのフラグフィールドの値が「0」、2件目以降のレコードのフラグフィールドの値が「1」ということになりますので、3件目は「1」ということになります。
重複するフィールドについてはよく出てくると思います。そんな時の考える一助になれれば嬉しいです。
参考文献:Claris FileMaker 公式トレーニング教材 から、「FileMaker 関数・スクリプトガイド」等を参考にしています
https://content.claris.com/fmb19_reg-ja