[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 メーリングリストの案内