- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数カラムに対するLIKE文の最適化)
複数カラムに対するLIKE文の最適化
このQ&Aのポイント
- 複数カラムに対するLIKE文の最適化について考えています。現在は不恰好なSQL文を使用していますが、もっとスマートな方法があるか知りたいです。
- column1~column3のデータに文字検索をしたい場合、現在使用しているSQL文では検索結果が0件になってしまいます。よりスマートなSQL文の書き方を教えてください。
- カラム1からカラム3のデータに対して、複数のワードでの文字検索を行いたいです。現在は不恰好なSQL文しか思いついておらず、より効率的な方法を知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
文字列を連結して、あたかも一つの列であるように見立てた上でLIKEとする。 ただし、3つのカラムのうちの一つでもNULLだと全体がNULLになる。 参考URLの5番目に対策あり。
その他の回答 (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に出現しないものですね。
質問者
お礼
回答ありがとうございます! 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%' ) 情報ありがとうございました!
お礼
ありがとうございます! concat関数を使えばいいのですね。 とても参考になりました。