• ベストアンサー

文字検索 (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 '%三%'

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

エラーにならなくはできますが、列の連結などの演算を行ったものを条件に指定すると、インデクスは利用できないと思いますよ? 【例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 '%三%'

yoshi_t
質問者

補足

回答ありがとうございます。 教えて頂いた、【例1】のSQL文で、検索する事が出来ました。 ありがとうございます。 >インデックスは利用できないと思いますよ? 上記について教えて頂きたいのですが、 インデックスを利用出来なくなる事の弊害は、総てのレコードに対して「列の連結」⇒「検索」の処理を行なう事により、処理時間がかかるという認識でよろしいのでしょうか?

その他の回答 (2)

回答No.3

>インデックスを利用出来なくなる事の弊害 仮にFAMILY_NAME列、FIRST_NAME列にインデクスを定義していても、 インデクスは利用されず、母体データを全件検索することになります。 そのため、データ数が数千件程度ならそれほど影響はないでしょうが、 数万件、数十万件となれば、データ件数に比例して検索性能が劣化することになります。

yoshi_t
質問者

お礼

たいへん参考になりました。 ユーザー情報を登録しているテーブルなのでデータ数が増える事を前提に、検索機能を見直す事としました。 ありがとうございました。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

WHERE FAMILY_NAME LIKE '%三%' OR FIRST_NAME LIKE '%三%' でできませんか?

yoshi_t
質問者

補足

早速の回答ありがとうございます。 >WHERE FAMILY_NAME LIKE '%三%' OR FIRST_NAME LIKE '%三%' 上記の場合ですと。 '%中川三郎%'とした時に引っかからなくなってしまうのが困ってしまいます。 (検索文字列には、フォームに入力された値を入れようと思っています)

関連するQ&A