• ベストアンサー

階層問い合わせで重複レコードの非表示

テーブルに人の名前とその人が属しているグループの名前を持っています。 ある人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回だけにするにはどうしたらよいのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • fu_u_ka_i
  • ベストアンサー率51% (15/29)
回答No.2

誤解があるようです。 >このテーブルはレコード数が多く、2回問い合わせするよりは、1回の方がいいかと思い階層問い合わせを使ってみました。 >ですが、階層問い合わせの方がパフォーマンスが落ちるのでしょうか? 階層問い合わせは、(最低でも)階層の階数分、索引およびテーブルを探査します。 なので、サブクエリを使った問い合わせの方が圧倒的に速く終わるはずです。 select man_name from tableA where group_name in (select group_name from tableA where man_name='A');

b13
質問者

お礼

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

その他の回答 (1)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 階層問い合わせを使う必要は無いと思いますょ。 Select man_name from tableA where group_name = (select group_name from tableA where man_name = 'A') order by man_name; でどうでしょう?

b13
質問者

お礼

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

関連するQ&A