• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数カラムに対するLIKE文の最適化)

複数カラムに対するLIKE文の最適化

このQ&Aのポイント
  • 複数カラムに対するLIKE文の最適化について考えています。現在は不恰好なSQL文を使用していますが、もっとスマートな方法があるか知りたいです。
  • column1~column3のデータに文字検索をしたい場合、現在使用しているSQL文では検索結果が0件になってしまいます。よりスマートなSQL文の書き方を教えてください。
  • カラム1からカラム3のデータに対して、複数のワードでの文字検索を行いたいです。現在は不恰好なSQL文しか思いついておらず、より効率的な方法を知りたいです。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

文字列を連結して、あたかも一つの列であるように見立てた上でLIKEとする。 ただし、3つのカラムのうちの一つでもNULLだと全体がNULLになる。 参考URLの5番目に対策あり。

参考URL:
http://www.orangesoft.co.jp/RDB/rdb_memo_strcat.html
tomo95
質問者

お礼

ありがとうございます! concat関数を使えばいいのですね。 とても参考になりました。

その他の回答 (1)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

#1です。 select * from tb where (column1 || column2 || column3) like '%word1%' ということです。(NULLの件、未考慮) "|" はShift+¥で出ます。2回押してね。 ただし、 word1が "ABC"であって、 column1 = "A" column2 = "B" column3 = "C" みたいなデータを拾ってしまうオマヌケもありうるので、 where (column1 || '/' || column2 ||'/' || column3) のような「セパレータ」を挟むことも考慮してください。 もちろん「セパレータ」もword1に出現しないものですね。

tomo95
質問者

お礼

回答ありがとうございます! SQL文は以下にしたら成功しました。 select * from tb where   ( concat( column1 , column2 , column3) like '%word1%' ) and ( concat( column1 , column2 , column3) like '%word2%' ) and ( concat( column1 , column2 , column3) like '%word3%' ) 情報ありがとうございました!

関連するQ&A