[前][次][番号順一覧][スレッド一覧]

mysql:8172

From: "Kawaji, Shinya" <"Kawaji, Shinya" <kawaji@xxxxxxxxxx>>
Date: Fri, 29 Aug 2003 12:15:43 +0900
Subject: [mysql 08172] Re: 列間で LIKE はできますか?

かわじ、です。


> あいまい検索のLIKEキーワードですが、列間での一致はできますでしょうか。
> また出来る場合、ワイルドカードの%はどのように明示すればよいでしょうか。
> 
> つまり、
> WHERE a.address LIKE '東京都%'
> のような感じで、
> WHERE a.address LIKE b.prefecture% .... ?
> みたいなことが出来ないかという事なのですが…。


以下の方法もあります。

where LOCATE(b.prefecture, a.address) = 1


> やりたいのは、上記例でのフィールド名からわかる通り、住所と県名のテーブ
> ルを用意して、住所を北の方の県から(北海道〜沖縄県の順)並び替えたいので
> す。それをするのに、上記のような列間あいまい検索が出来れば、
> SELECT * FROM a,b WHERE a.address LIKE b.prefecture% ORDER BY b.id
> とかでできるかなと思ったので…。
> 
> 他によい方法があれば、そちらでもよいので教えていただけるとありがたく存
> じます。
> 既に大量のデータがあり既存の構造を変更し難く、また県名が必要なのがたく
> さんの用途中のほんの1アプリケーションだけなので、aに県名フィールドを
> 持たせるとかは最終手段で考えています。

要件には反しますが、テーブル定義から考慮が可能であれば、以下のような
方法もあります。

 1) 住所は、県名とそれ以下の住所の欄に分けておく
 2) 県名は ENUM型にする(そのままで定義順に ORDER BY 出来ます)

もしくは、

 1) まず、市町村別のテーブルを用意しておく(県名、市町村名、市町村別ID)
 2) マスターテーブルの方には市町村IDと、それ以下の住所のみ保持しておく

という感じですと、市町村の合併時などにもある程度簡単に対応できるかと
思いますし、データ量も押さえられます。



[前][次][番号順一覧][スレッド一覧]

      8166 2003-08-29 05:50 [OHTSUKA Ko-hei <tech] 列間で LIKE はできますか?              
      8171 2003-08-29 12:02 ┣[班石悦夫 <madara@xxx]                                       
->    8172 2003-08-29 12:15 ┣["Kawaji, Shinya" <ka]                                       
      8178 2003-08-30 23:13 ┗[Tomoyuki Ishino <ish]