アプリ版:「スタンプのみでお礼する」機能のリリースについて

column1~column3のデータに文字検索をしたいのですが、
下記のような不恰好なSQLしか思いつきません、、。

select * from tb where
  ( column1 like '%word1%' or column2 like '%word1%' or column3 like '%word1%' )
and ( column1 like '%word2%' or column2 like '%word2%' or column3 like '%word2%' )
and ( column1 like '%word3%' or column2 like '%word3%' or column3 like '%word3%' )

試しに、
select * from tb where
  ( ( column1 or column2 or column3) like '%word1%' )
and ( ( column1 or column2 or column3) like '%word2%' )
and ( ( column1 or column2 or column3) like '%word3%' )

と考えたのですが、これですと検索結果0件になってしまいます。
もっとスマートなSQL文がありましたら、ご教授頂きたいです。

A 回答 (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に出現しないものですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

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%' )

情報ありがとうございました!

お礼日時:2005/08/24 13:20

文字列を連結して、あたかも一つの列であるように見立てた上でLIKEとする。



ただし、3つのカラムのうちの一つでもNULLだと全体がNULLになる。

参考URLの5番目に対策あり。

参考URL:http://www.orangesoft.co.jp/RDB/rdb_memo_strcat. …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/08/24 13:16

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

関連するカテゴリからQ&Aを探す