[Ludia-users 152] Re: 複数のテーブルに対する全文検索について

Back to archive index

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
>
> 




Ludia-users メーリングリストの案内
Back to archive index