0
開始日と終了日からconnect by
を使用すると、その範囲内のすべての日付を選択できます。しかし、これを複数の開始日と終了日に一般化するのに問題があります。ここで(代わりに、日付の数字を使用して)簡単な例です:接続を使用して複数の値の範囲を生成する際に問題が発生する
select
name,
min + level
from (
select 'foo' as name, 0 as min, 5 as max from dual
union all
select 'bar' as name, 10 as min, 20 as max from dual
)
connect by nocycle
(prior name = name) and level <= (max - min);
私は15行を取得するために期待されるが、代わりに私が唯一2.クエリを簡素化取得:
select
name,
min + level
from (
select 'foo' as name, 0 as min, 5 as max from dual
)
connect by nocycle
level <= (max - min);
私は5行を取得、 予想通り。しかし、次は一つだけを返します。
select
name,
min + level
from (
select 'foo' as name, 0 as min, 5 as max from dual
)
connect by nocycle
(prior name = name) and level <= (max - min);
、どういうわけか、以下のとおりん:ここで何が起こっている
select
name,
min + level
from (
select 'foo' as name, 0 as min, 5 as max from dual
)
connect by nocycle
(prior name = name or 1=1) and level <= (max - min);
、そしてどのように私はそれを解決するのですか?
@thomsmithを - 私はあなたがC#の開発者とすることができ、必要ないかもしれないあなたのプロフィールからご覧くださいOracle SQLの微妙な/奇妙なことに気を配ります。もしそうなら、 '... and prior sys_guid()is not null'トリック(' nocycle'なし)を使い、それがどうやって、なぜ、どうして、なぜ必要なのか心配しないでください。それが広く使われていることを知っているだけで、あなたがしようとしていたことを正確に行います。 – mathguy