• 締切済み

再起SQL が無限ループします。

再起SQL が無限ループします。 このようなテーブルのデータがあったときに、 1番上の1レコードを選択して、 中分類か小分類が同じデータを取得したいんです。 大分類 中分類 小分類 -------------------- 4444 |aaaa |0001 4444 |bbbb |0001 4444 |cccc |0002 4444 |dddd |0002 4444 |aaaa |0003 6666 |ffff |0003 ↓このように取得したい 大分類 中分類 小分類 -------------------- 4444 |aaaa |0001 4444 |bbbb |0001 4444 |aaaa |0003 6666 |ffff |0003 再帰SQLのwithを使ってみたのですが、 無限ループしてしまいます。 with rec (大分類,中分類,小分類) as (select * from 商品テーブル where rowid=1 union all select * from 商品テーブル h, rec r where(h.中分類=r.中分類 or h.小分類=r.小分類) and not (h.中分類=r.中分類 and h.小分類=r.小分類) ) select * from rec; union all以下のselect条件をxorで取ればいいと 思うのですが、それができていないようです。 withでやる必要はないので、他の方法でも いいのですが、S/Pは使えない事情があります。 アドバイスをお願いします。

みんなの回答

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

こんにちわ。 select distinct 大分類,中分類,小分類 from 商品テーブル じゃだめでしょうか?

回答No.1

with a as ( select dai,tyu,syo ,case when tyu = first_value(tyu)over(partition by dai) or syo = first_value(syo)over(partition by dai) then 1 else 0 end as b from syohin ) select dai,tyu,syo from a where b = 1

suraimuman
質問者

補足

o123459876さん、ありがとうございます! 文章の説明が悪かったのですが、 1番上の1レコードを選択して、 中分類か小分類が同じデータを取得し、 さらに取得したレコードと同じ中分類か小分類の レコード取得し…と、中分類か小分類が一致する データがなくなるまで繰り返したいのです。 例のだと、 6666 |ffff |0003 のデータも取得したいのです。 何か方法ありますでしょうか。