[pgsql-jp: 29211] 電話番号から住所を検索するSQL
藤本悟司
satoshi @ try-square.co.jp
2003年 2月 25日 (火) 11:45:52 JST
はじめて投稿いたします。
藤本と申します。
PostgreSQL-7.3を利用しています。
SQL初心者で、下記のような問題でつまづいております。
どなたか、アドバイス頂けませんか。
やりたいことは、
電話番号の全部または先頭の一部 から、
住所の全部または先頭の一部 を検索する、
というものです。
用意できるデータベースは、次のようなものです。
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で済む
簡単な書き方があるのでは、とも考えはじめて、
このあたりで挫けてしまいました。。。
例題集にも出てきそうな、基本的な問題なのですが。
C言語などの手続き型プログラミングならば、ある程度
経験があるのですが、もっと代数的なロジックといいますか、
SQL的な考え方のようなものに慣れておらず、
プログラミングとは根本から違う問題の捉え方が
必要なのだと思いました。
また、こういったSQLセンスを磨くのに良い書籍や
例題集などありましたら、ご紹介ください。
よろしくお願いします。
----
藤本 悟司
株式会社トライスクエア
〒104-0045 東京都中央区築地3-5-13北村ビル5F
TEL: 03-5148-3345 / FAX: 03-5148-3346
Mobile: 070-6668-4644
E-Mail: satoshi @ try-square.co.jp
WEB: http://www.try-square.co.jp/
Key fingerprint = 95F2 6B3D 0B8C 374A 5E67 CA02 F28F 703A C1A9 8346
pgsql-jp メーリングリストの案内