ssenou
sseno****@techn*****
2007年 12月 14日 (金) 17:01:12 JST
瀬能です。 サンプルありがとうございます。 参考になりました。 また質問などがあった時はよろしくお願いします。 ----- Original Message ----- From: <kanou****@nttda*****> To: <ludia****@lists*****> Sent: Thursday, December 13, 2007 6:24 PM Subject: [Ludia-users 150] Re: 複数のテーブルに対する全文検索について > 加納です。下記は間違いですね。 > >> select * from >> (select * from table1 where data @@ 'test') AS t1, >> (select * from table2 where data @@ 'test') AS t2 >> WHERE t1.id = t2.id; > > これだと、「検索対象が"件名かつ本文"の場合」になります。 > > 検索対象が"件名又は本文"の場合ということですから、 > >> > SELECT * FROM table1,table2 >> > WHERE >> > table1.id = table2.id AND >> > (table1.data @@ 'TEST' or table2.data @@ 'TEST') > > 少なくとも論理的にはこれで正しいと思います。あとはプラ > ンがどうかですが。 > > で、幸坂くんのアイデアを利活用すると、と思ったのですが、 > 複雑怪奇になりますね。 > > select * from > (select * from table1 where data @@ 'test') AS t1 > INNER JOIN > table2 AS t2 > ON t1.id = t2.id > UNION > select * from > (select * from table2 where data @@ 'test') AS t2 > INNER JOIN > Table1 AS t1 > ON t1.id = t2.id; > > だといかがでしょう?論理的には合ってます。たぶん・・・ > 2回アクセスすることになるので、効率的とは言えませんが、 > 強制的に全文検索インデックスを使えていると思います。 > > 蛇足ですが、旧形式の結合は、OUTER JOINを使用する際に > 大幅に書き換えなければいけないため、JOIN演算子を使用 > されることをお勧めします。旧形式でOUTER JOINを使おう > とすると、Oracle方言に引っかかったりマルチプラット > フォームでの弊害も多いです。 > > 実は、FULL OUTER JOINでうまくいくかと思ったのですが、 > うまくいかないことに気がつきました。そのため、JOIN演 > 算子を残しています。 > > FULL OUTER JOIN については、下記を参照ください。 > http://www.postgresql.jp/document/pg825doc/html/queries-table-expressions.ht > ml#QUERIES-FROM > > _______________________________________________ > Ludia-users mailing list > Ludia****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/ludia-users > >