dポイントプレゼントキャンペーン実施中!

テーブルに人の名前とその人が属しているグループの名前を持っています。
ある人Aと同じグループに属する人を取得したいです。

SELECT man_name
FROM tableA
START WITH man_name ='A'
CONNECT BY (PRIOR group_name = group_name)
and (prior man_name < man_name)

無限ループのエラーを回避する為に、
and (prior man_name < man_name)
の条件を入れてますが、同じ人(レコード)が
何回も現れてしまします。
同じレコードの表示を1回だけにするにはどうしたらよいのでしょうか。

A 回答 (2件)

誤解があるようです。



>このテーブルはレコード数が多く、2回問い合わせするよりは、1回の方がいいかと思い階層問い合わせを使ってみました。
>ですが、階層問い合わせの方がパフォーマンスが落ちるのでしょうか?

階層問い合わせは、(最低でも)階層の階数分、索引およびテーブルを探査します。
なので、サブクエリを使った問い合わせの方が圧倒的に速く終わるはずです。

select man_name
from tableA
where group_name in (select group_name from tableA where man_name='A');
    • good
    • 0
この回答へのお礼

ありがとうございます。
階層問い合わせはFROM句が一つなので、問い合わせが1回かと思っていました。
パフォーマンスを考えたら、階層問い合わせはあまり使わない方がいいみたいですね。

お礼日時:2005/07/31 13:49

こんにちわ。



階層問い合わせを使う必要は無いと思いますょ。
Select man_name from tableA where group_name
= (select group_name from tableA where man_name = 'A')
order by man_name;
でどうでしょう?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
副問い合わせでも対応できるようですが、
このテーブルはレコード数が多く、2回問い合わせするよりは、1回の方がいいかと思い階層問い合わせを使ってみました。
ですが、階層問い合わせの方がパフォーマンスが落ちるのでしょうか?

お礼日時:2005/07/30 18:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す