SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

既存のRDBシステムに会員情報の名寄せ機能を追加する

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

既存のRDBシステムに会員情報の名寄せ機能を追加する 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

ビジネスオブジェクトの準備

 重複値抽出のSQL命令を組み立てるロジックは、[App_Code]配下の「Unify.vb」にあります。「Public Class Unify」内の「Public Function getWMemberDataReader」の引数は以下のとおり、図6の上側の画面での指定条件を受け取り、その結果セットを返します。

 なお、論理型の引数は「チェックがあればTRUE、なければFALSE」を受け取り、文字列型の引数は「条件があればその入力文字列、なければ空文字」を受け取ります。

表4 getWMemberDataReaderのパラメータ
↓対応列\データ型→ 論理型 文字列型
姓(漢字) chbSeiKanji strSeiKanji
名(漢字) chbMeiKanji strMeiKanji
姓(カナ) chbSeiKana strSeiKana
名(カナ) chbMeiKana strMeiKana
住所1 chbAddress1 strAddress1
電話番号 chbTelNum strTelNum
携帯番号 chbMobileNum strMobileNum

 まず、ロジックの効率化のため、3つの配列と初期値を下表のように設定します。

表5 準備する配列と格納する値
↓index\配列名→ aryField(index) aryCheck(index) aryInput(index)
0 "SeiKanji" 引数chbSeiKanjiの値 引数strSeiKanjiの値
1 "MeiKanji" 引数chbMeiKanjiの値 引数strMeiKanjiの値
2 "SeiKana" 引数chbSeiKanaの値 引数strSeiKanaの値
3 "MeiKana" 引数chbMeiKanaの値 引数strMeiKanaの値
4 "Address1" 引数chbAddress1の値 引数strAddress1の値
5 "TelNum" 引数chbTelNumの値 引数strTelNumの値
6 "MobileNum" 引数chbMobileNumの値 引数strMobileNumの値

 次に、サブクエリー内の「WHERE」句の重複条件、「GROUP BY」句の列名、「WHERE」句の制約条件の格納用に、配列aryMulti、aryGroup、aryLimitをそれぞれ用意します。

 配列化された引数を繰り返し走査し、重複チェックがあれば、aryMulti配列とaryGroup配列を拡張してSQL部分文字列を格納し、制約条件があれば、aryLimit配列を拡張してSQL部分文字列を格納していきます(制約条件については、ワイルドカード「%」が全角または「*」で指定された場合の変換や、NULL値が指定された場合も考慮しています)。

 走査終了後、上記で準備した各配列を使って下図のようにSQLを組み立て、変数strSqlに格納しています。その後SQLコマンドを発行し、実行結果を戻り値として返します。

 ちなみにJoin関数は、配列の要素を区切り文字で繋げた文字列を返す関数です。

図7 SQL命令の組み立てイメージ
図7 SQL命令の組み立てイメージ

次のページ
まとめ

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
既存のRDBシステムに会員情報の名寄せ機能を追加する連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 遠藤 存(エンドウ アリ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6741 2012/09/13 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング