お世話になります。
DBからSQLでキーワードによる検索をかけるときですが、
二つ以上のワードがあるときに、一つのキーワードがほかのキーワードと
かぶってしまう場合、例えば゛、『あいうえお』と『いうえ』等で絞り込むと、
結果的に『あいうえお』が含まれるものだけが該当しますが、これを、
『あいうえお』を含み、更にそれ以外にも『いうえ』が含まれるものを
絞り込むには、どうすればよいでしょうか。
つまり、『あいうえお』のみしか含まれないものは該当しないようにする方法です。
現在のSQLは、
(SELECT * FROM xxxx WHERE tablename LIKE '%あいうえお%' AND tablename LIKE '%いうえ%')
のような感じです。
使用しているDBは、MySQL、SQLiteです。
何卒よろしくお願いいたします。
No.5
- 回答日時:
「カンマや空白で区切られたキーワードの羅列から単語検索」ではなくて、「通常の分かち書きされてない日本語文章から、自由単語検索」なのですよね?
英文のように分かち書きされていれば、前後に空白を入れた文字列で like 検索すれば、部分文字列のみのところと、長い文字列のところとは、個別マッチが可能
カラム値 例 ' きー ワード キーワード '
-- カラム値の前後にも区切り文字の空白を入れておくことで、先頭や最後もマッチさせ得る、検索時に、カラム値にも concat で前後に連結してもよいが時間的に無駄が多い。
条件式 例
where `カラム` like '% ワード %' and `カラム` like '% キーワード %'
分かち書きのない状態で、部分単語のみを見つけるには、perlくらいの強力な正規表現検索ができれば、可能かもしれないが、SQLiteは、正規表現検索させるには、ユーザー関数で組み込む必要がある、MySQLの正規表現検索やブール全文検索も、言明(xが前方にないaにマッチ)検索は実装されてないので、No2の方の回答のように、順番変えた組を作ってlike 検索くらいしかなさそう。OracleやpostgreSQL,Accessについてはよく知らない。
回答、ありがとうございます。
やはり、簡単にはできないようですね。
やるとするならば、キーワードを全部つなぎ合わせてORで
探すといった方法しかないみたいです。
丁寧な説明、ありがとうございました。
No.4
- 回答日時:
No3です。
ALLではなくINですね。失礼しました。
IN句を使ってキーワードのいづれかに該当するものを
取り出す、ということです。IN句の基本的な使い方
おわかりだと思いますが。
キーワードが複数あるということならば、ということで
他のテーブルを参照する方法を提案したのですが、
>また、要はユーザからの入力で検索をかけたいので、いちいちテーブルに
>するというのは、少し和漢が感じられます。
ということであれば、
検索キーワードが複数あり、その都度変更されるという
のであれば、Visual Basic、あるいはOffice系のソフト
たとえば、ExcelやAccessなどを使用してテキストボックスなり
他のコントロールなどに入力し、入力したキーワードを
VB、あるいはSQLを使って、SQLでデータを取り出しIN句でフィルタをかける、
あるいは、データベースにデータベースが理解する
SQl文を発行して取り出す、など考えられることはいろいろあります。
セキュリティ、トラフィック制限、使用条件などによって
作り方は変わって来ます。
この回答への補足
う~ん…
INというのは数ある中からひとつでも含まれていれば…という
ことですが、これとはちょっと用途が違います。複数のキーワードが
『全て』含まれていないと意味がないのです。
No.2の方が意味合い的には近いのですが、やはりキーワードが多いほど
条件分が長くなってしまいます。
やはり、簡単にはいかないのでしょうか…。
No.3
- 回答日時:
キーワードがたくさんあるならば、キーワードの
テーブルを作っておき、SQLの中でALLを使って
テーブルのキーワード検索をする、というのは
どうですか。
SELECT * FROM xxxx WHERE カラム名その1 = ALL(SELECT カラム名その2 FROM キーワードテーブル)
ほかにも、SQLエンジンによって方法はあるとは思いますが。
この回答への補足
その方法では、キーワードがかぶっていても、別に検索はできるのでしょうか。
また、要はユーザからの入力で検索をかけたいので、いちいちテーブルに
するというのは、少し和漢が感じられます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- その他(ブログ) ブログを始めたいと思うのですが、下記のような場合のおすすめブログサービスを教えてください。 収益化な 4 2023/04/10 10:01
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- SEO SEOの検索順位について 例えばあるキーワードで検索順位が6位だとしたら、そのキーワードに関連する良 1 2022/06/30 21:51
- その他(パソコン・周辺機器) フォルダの中を特定のキーワードを含むファイルだけ探したいのに、そのキーワードが含まれてないファイルも 2 2023/04/07 11:56
- ライフスタイル・ヘルスケア URLを開くアプリが見つかりません 2 2022/09/16 12:09
- Perl Perlで特定文字列から特定文字列までを抜き出したい 4 2022/04/02 14:24
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
android版のMs accessはありま...
-
警察はスマホに保存した動画や...
-
Microsoft Access での経過日数...
-
エクセルのフィルタ抽出が固まる
-
データベースファイル(.db)を開...
-
構文エラー:演算子がありませ...
-
20万行あるデータを動かしたい
-
シートが異なるセル同士を、相...
-
Accessから無償RDBMSへの移行
-
データベースソフトのTCARDにつ...
-
Accessを開きなおすとテキスト...
-
ここ2番目はBOTでしょうか?
-
sql update で 抽出条件データ...
-
外部のデータベースについて
-
googleフォームでインストール...
-
データベースの選定について 要...
-
ドリームメーカーってどうやっ...
-
Accessのフォームへ、記録者の...
-
エクセル
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
INSERT時に発番を行いたい
-
カラムの存在チェック
-
カラム情報とはなんですか?
-
GROUP BY で列名は指定できない...
-
SQL キーワード検索にて
-
SQL 同テーブル、同フィールド...
-
ACCESS 1クエリでの複数ALTER文
-
データを削除しても表領域の使...
-
Viewにインデックスは張れ...
-
異なるスキーマからデータを抽...
-
datapumpの実行方法について
-
ORA-00959: 表領域'****'は...
-
CLOB型へのINSERT
-
Access レコードを追加できませ...
-
postgreSQLのint型は桁数指定が...
-
INDEXの無効化
-
SQLでスキーマ名(所有者名)の...
-
ACCESS 複数テーブル・複数フィ...
-
Data Pump で大量データインポ...
-
テーブルからのselectにおいて...
おすすめ情報