CodeZine(コードジン)

特集ページ一覧

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2012/09/13 14:00
目次

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

 重複値抽出の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命令の組み立てイメージ

  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

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

著者プロフィール

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

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

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

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5