プロが教えるわが家の防犯対策術!

テーブル「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 '%三%'

A 回答 (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 '%三%'

この回答への補足

回答ありがとうございます。
教えて頂いた、【例1】のSQL文で、検索する事が出来ました。
ありがとうございます。

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

補足日時:2006/11/12 20:30
    • good
    • 0

>インデックスを利用出来なくなる事の弊害



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

たいへん参考になりました。

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

ありがとうございました。

お礼日時:2006/11/14 10:02

WHERE FAMILY_NAME LIKE '%三%' OR FIRST_NAME LIKE '%三%'


でできませんか?

この回答への補足

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

補足日時:2006/11/12 18:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!