- ベストアンサー
文字検索 (LIKE)を使った場合
テーブル「USERS」の項目「FAMILY_NAME」「FIRST_NAME」をつなげた文字列に対して検索を行ないたいのですが、以下の「LIKE」を使ったSQL分ではカラムがないとエラーになるようです。 方法があれば教えて下さい。 よろしくお願いします。 テーブル:USERS 項目: FAMILY_NAME FIRST_NAME 値: 三木 直人 中川 三郎 SELECT CONCAT(FAMILY_NAME,FIRST_NAME) AS USER_NAME FROM USERS WHERE USER_NAME LIKE '%三%'
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
エラーにならなくはできますが、列の連結などの演算を行ったものを条件に指定すると、インデクスは利用できないと思いますよ? 【例1】 SELECT CONCAT(FAMILY_NAME,FIRST_NAME) AS USER_NAME FROM USERS WHERE CONCAT(FAMILY_NAME,FIRST_NAME) LIKE '%三%' 【例2】 SELECT USER_NAME FROM (SELECT CONCAT(FAMILY_NAME,FIRST_NAME) AS USER_NAME FROM USERS AS USR WHERE USER_NAME LIKE '%三%'
その他の回答 (2)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>インデックスを利用出来なくなる事の弊害 仮にFAMILY_NAME列、FIRST_NAME列にインデクスを定義していても、 インデクスは利用されず、母体データを全件検索することになります。 そのため、データ数が数千件程度ならそれほど影響はないでしょうが、 数万件、数十万件となれば、データ件数に比例して検索性能が劣化することになります。
お礼
たいへん参考になりました。 ユーザー情報を登録しているテーブルなのでデータ数が増える事を前提に、検索機能を見直す事としました。 ありがとうございました。
- ham_kamo
- ベストアンサー率55% (659/1197)
WHERE FAMILY_NAME LIKE '%三%' OR FIRST_NAME LIKE '%三%' でできませんか?
補足
早速の回答ありがとうございます。 >WHERE FAMILY_NAME LIKE '%三%' OR FIRST_NAME LIKE '%三%' 上記の場合ですと。 '%中川三郎%'とした時に引っかからなくなってしまうのが困ってしまいます。 (検索文字列には、フォームに入力された値を入れようと思っています)
補足
回答ありがとうございます。 教えて頂いた、【例1】のSQL文で、検索する事が出来ました。 ありがとうございます。 >インデックスは利用できないと思いますよ? 上記について教えて頂きたいのですが、 インデックスを利用出来なくなる事の弊害は、総てのレコードに対して「列の連結」⇒「検索」の処理を行なう事により、処理時間がかかるという認識でよろしいのでしょうか?