SQLによる条件付き重複データの抽出と単純な名寄せ

CodeZine / 2012年9月13日 14時0分

図9 GridViewの配置(完成形)

 会員情報を含むリレーショナルデータベース(以下、RDB)システムでは、同じ人が別々のIDでテーブルに登録されることがあります。本連載では、二重登録状態を解消する「名寄せ」機能の追加方法を紹介します。

■はじめに

 「ワタナベだけど同じDMが何通も届く!」会員からのクレームの電話は、それだけ言い放って切られてしまいました。発信番号も非通知で、他の情報は一切確認できません。

 会員テーブルから、同姓同名のデータ一覧の抽出が必要ですが、どうしましょうか。

図1 同姓同名データの抽出
 


 下図はSQL命令で抽出後、コーディングで処理する一例ですが、想像以上に難解です。

図2 コーディングでの処理


 ところが実は、SQL命令だけで目的を達する、魔法のような一文が作れるのです。

●「名寄せ」とは

 「名寄せ」は元々金融機関の用語で、同一顧客の複数口座を一元管理することを指し、ペイオフ制度(注1)の導入に伴い、その重要性が増しています。また年金でも、一人に複数の年金番号が振られると、受給資格(25年以上の加入期間)の確認のため、名寄せが不可欠です。



注1
 金融機関破たん時、預金者一人あたり1,000万円までの払い戻しを保証すること。



 本連載では、一般的なRDBシステムにおいて、テーブルに二重登録された同一人物を1つの会員IDに統合する処理を「名寄せ」と定義することとします。スタッフが「既存の会員情報を修正」せず「新規に会員登録」する、Web上で顧客が複数IDを取得する、など二重登録は日々発生するため、RDBの整合性を保つためにも名寄せ機能は常時必要になります。

●対応可能なRDB

 MySQL(4.1以上)、SQL Server、Access、PostgreSQL、OracleなどのRDBで可能です。

 ただし、EXISTS演算子とサブクエリー(後述)が利用できないSQLiteでは不可です。

●本連載の構成

 各回を通して、前半がRDBのテーブルの理論編、後半がASP.NET+SQL Serverでの実践編、という形で進めます。前半は開発言語、RDBに依存しませんので、広く応用できます。

 第1回はSQLによる重複値データの抽出と単純な名寄せ、第2回は複雑な名寄せとその処理、第3回は名寄せに関連したテーブルの処理、という順で紹介します。

 皆様のRDBシステムに名寄せ機能を組み込む際の一助となることが目標です。

●必要となる前提知識と環境

 前半部分はSQL命令の解説になるので、SQLの基礎知識が前提となります。

 後半部分は各回を通して、ASP.NET開発の基礎知識(SQL Serverへのアクセス方法、MultiViewコントロールの使い方を含む)、および以下の環境が前提となります。

開発ツール:Visual Web Developer 2010 Express SP1(以下、VWD2010) 開発言語など:Visual Basic(以下、VB)、コードビハインドモデルで開発 使用データベース:SQL Server 2008 Express Edition SP1  今回は、ビジネスオブジェクトを用いたGridViewの作成方法の知識も必要になります。



■関連記事
ASP.NETにWijmoの表現力を取り入れて最新Web環境を手軽に構築する
データの同時更新を防ぐための排他制御
SQLによる条件付き重複データの抽出と単純な名寄せ
いつでもリッチなレポート機能を提供するSQL Server 2012の「Power View」
データの整合性を確保するためのトランザクション制御

■記事全文へ

CodeZine

トピックスRSS

ランキング