[pgsql-jp: 29216] Re: 電話番号から住所を検索するSQL

Kei Yanaihara kei @ easylife.co.jp
2003年 2月 25日 (火) 12:13:42 JST


矢内原@イージーライフです。

神奈川県藤沢市が0466で、神奈川県厚木市が046で始まり次が6以外で
あるなら、以下のようなデータにすれば良いのでは?

 Table: tel2addr
 --------------------------------
 id  |  tel                 |  addr
 ----+--------+---------------------
 31  | 046([0-5]|[7-9])*    | 神奈川県厚木市
 32  | 0466*                | 神奈川県藤沢市

以下のSQLで検索できます。
select addr from tel2addr where '電話番号' ~ tel;


> やりたいことは、
>   電話番号の全部または先頭の一部 から、
>   住所の全部または先頭の一部 を検索する、
> というものです。
> 
> 用意できるデータベースは、次のようなものです。
> 
> Table: tel2addr
> --------------------------------
> id  |  tel   |  addr
> ----+--------+---------------------
>  1  | 03     | 東京都中央区
>  2  | 03     | 東京都渋谷区
> ・・・・
> 30  | 045    | 神奈川県横浜市
> 31  | 046    | 神奈川県厚木市
> 32  | 0466   | 神奈川県藤沢市
> ・・・・
> 459 | 082486 | 広島県比婆郡高野町
> 
> 任意の具体化レベルの電話番号と、任意の具体化レベルの住所
> の対応が、分かっている限り全て列挙してあります。
> ただしid=1とid=2のレコードを見てもらえば分かる通り、
> ある電話番号に対して妥当な住所は複数ありえます。
> (電話番号:住所=1:n)
> idの並び順には意味はありません。
> 
> ここでユーザに、例えばフォームから、電話番号の一部
> または全部を入力してもらい、「候補として妥当な住所」を
> 全て出力したいのですが。
> 
> 単純にLIKEを使った前方一致検索では、冗長な結果が出て
> (例:電話番号0466を入力した場合、藤沢市だけでなく
>  厚木市も含んでしまう)しまいますので、
> SELECTした結果から、さらにSELECTで絞り込まなければ
> ならないのか、また絞り込むといっても、検索で一致した
> 部分の長さがカギなので、特殊なSQL関数を利用しなければ
> ならないように思え、そもそも、ひとつのSELECTで済む
> 簡単な書き方があるのでは、とも考えはじめて、
> このあたりで挫けてしまいました。。。

-- 
/**********************************************************/
/*  Kei Yanaihara                                         */
/*    kei @ easylife.co.jp                                  */
/*                                                        */
/*  EasyLife Corporation                                  */
/*    http://www.easylife.co.jp/                          */
/*                                                        */
/*    TEL : 03 - 5726 - 1080                              */
/*        : 090 - 4425 - 9748                             */
/*    FAX : 03 - 5726 - 1090                              */
/*                                                        */
/*    152-0035                                            */
/*      1-21-1 Jiyuugaoka                                 */
/*      Meguro-ku Tokyo, Japan                            */
/**********************************************************/



pgsql-jp メーリングリストの案内