WHERE句でフィールドの別名を使うとエラーするのは周知の事実だが、複数キーワード検索と全文検索をフルテキスト機能などを使わずに実現するにはちょっと小細工が必要だ。
今回、特に気にしてなかったのだが、複数キーワードで全文検索したいと言う要望が浮上した。
まず、WHERE句で別名、いわゆるエイリアス名を使いたいのは理由があって、全文検索するために、全部のテーブルをクエリーで結合して、それを検索対象とすれば全文検索は直に実現可能だ。
その際、フィールドとフィールドを結合する際、間にスペースを入れておいた方が後々便利なので、スペースを間にいれて検索対称のフィールドを全部結合してエイリアスをAとかの1文字にしてしまう。
そして、LIKE句で%で区切って検索すれば全文検索は完了する。
その際、WHERE句ではエイリアス名のAを使う事が出来ないので、結合したテーブルをそのまま検索しなければならなくなるわけだ。
これだと、複数キーワード対応する度に結合したSQL文をキーワード数分使うため、SQL文自体がかなり冗長になってしまいちょっといただけない。
そこで、FROMを使ってサブクエリーにすることで解決する。
SELECT * FROM (SELECT (長ったらしいフィールドの結合SQL) AS A FROM …)B WHERE B.A LIKE ‘%ABC%’ AND B.A LIKE ‘%DEF%’ AND B.A LIKE ‘%GHI%’ …….と書けば短くて済むと言うわけだ。
コメント