mysql:281
From: Shogo Hamamoto <Shogo Hamamoto <KHC01210@xxxxxxxxxx>>
Date: Sun, 18 Oct 1998 17:17:25 +0900
Subject: [mysql 281] Re: SQL の検索条件について
tommy@xxxxxxxxxx wrote: > Date: Sun, 18 Oct 1998 05:21:52 +0900 > From: 民斗 <tommy@xxxxxxxxxx> > Reply-To: mysql@xxxxxxxxxx > Errors-To: mysql-return-280-KHC01210=nifty.ne.jp@xxxxxxxxxx > To: mysql@xxxxxxxxxx > > MySQL を使った日本語文書検索システムを作ってみました。 > > が、会社の業務で作ったので、残念ながら公開できません…(^^; > > あらかじめ、chasen で文書を単語毎に区切り、名詞だけを抜き出して、 > MySQL で作ったキーワードテーブルに登録しておき、そのテーブルを検索する > という方式です。 > > まだサンプルデータの数が少ないですが、期待通り(期待以上かも)の速度で > 動いてくれてます。 > > で、一つ質問があります。MySQL というか SQL についての質問なんですが…。 > > 次のようなテーブル(T)に、文書番号(id)とキーワード(str)を登録してあると > します。 > > create table T (id int not null, str char(32) not null); > # index は省略 > > 1) "hoge" というキーワードと "fuga" というキーワードの両方を含む文書を > 検索する時は、次のようにできます。 > > select a.id from T as a left join T as b using (id) > where a.str="hoge" and b.str="fuga"; > > 2) "hoge" または "fuga" を含むという場合は、次でできます。 > > select id from T where str="hoge" or str="fuga"; > > ここまではいいんですが、もっと複雑な条件の時にどうすればいいのか > わかりません。例えば、 > > 「"hoge" または "fuga" を含み、かつ "herohero" も含む」 > > とか…。しかもそれをプログラムから自動的に生成したいのです。 > > どうも、1) と 2) の文法が違いすぎて、SQL では1行で書くのは無理のような > 気がしてるのですが…。 > > なんかうまい方法があるでしょうか? > -- > 民斗 <tommy@xxxxxxxxxx> 2)の構文の方がはるかに効率が良いのですが、プログラム的には UNIONを使って、検索結果のテーブルを結合する方法が、1)の構文に 近い形で記述できると思います。 UNIONは、複数のテーブルを(論理的に)結合する命令です。 ちなみに、MySQLのcrash-me(takeshiさんありがとう!)を見ると、MySQL ではサポートされていない機能でした。(残念) 参考までに、UNIONは、 AというテーブルとBというテーブル(テーブルはasで作った仮想テーブルでも良 い) を結合する場合、 table A UNION table B と記述できます。AとBのテーブルの形式(フィールドの数等)は必ずしも一致して いなくても構いません。
-> 281 1998-10-18 17:17 [Shogo Hamamoto <KHC0] Re: SQL の検索条件について 284 1998-10-20 07:37 ┗[民斗 <tommy@xxxxxxxx] 286 1998-10-21 17:21 ┗[<takeshi@xxxxxxxxxx>] jp doc (Re: SQL の検索条件について)