のOracle Database 12cのEnterprise Editionのリリース12.1.0.2.0オラクルに接続することでは、私は、私はちょうど何かが欠けてる期待
にあまりにも多くの行を生成するようだが、私は「によって接続」なしでこのクエリを実行する場合、I 2行を取得します。私が "レベルで接続< = 4"を追加すると、それらの2つの行のそれぞれを4回得ることが期待されます。実際の結果は異なります。
ここで何が起こっているのか分かりますか?私は各行を4回だけ繰り返すソリューションを探しているわけではありません - 私は既にそれを持っています。私は何が起こっているのか、そしてなぜそれが理解できるのか探しています。
with alpha as (
select 1 as id
from dual
),
beta as (
select 1 as alpha_id,
1 as beta_no
from dual
union all
select 1 as alpha_id,
2 as beta_no
from dual
)
select a.id,
b.beta_no,
level as the_level
from alpha a
inner join beta b
on b.alpha_id = a.id
connect by level <= 4
order by a.id,
b.beta_no,
level
;
ID BETA_NO THE_LEVEL
1 1 1 1 1 2 1 1 2 1 1 3 1 1 3 1 1 3 1 1 3 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 1 4 1 2 1 1 2 2 1 2 2 1 2 3 1 2 3 1 2 3 1 2 3 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4 1 2 4
30行がmathguyする
感謝を選択しました。彼が以下の答えで提供した第二のリンクは、私が探していたものとまったく同じものでした。具体的には:
1 with t as (select 1 as id from dual union all
2 select 2 from dual)
3 --
4 select id, level
5 ,prior id
6 ,sys_connect_by_path(id,'=>') as cpath
7 from t
8* connect by level <= 3
SQL>/
ID LEVEL PRIORID CPATH
---------- ---------- ---------- --------------------------------------------------
1 1 =>1
1 2 1 =>1=>1
1 3 1 =>1=>1=>1
2 3 1 =>1=>1=>2
2 2 1 =>1=>2
1 3 2 =>1=>2=>1
2 3 2 =>1=>2=>2
2 1 =>2
1 2 2 =>2=>1
1 3 1 =>2=>1=>1
2 3 1 =>2=>1=>2
2 2 2 =>2=>2
1 3 2 =>2=>2=>1
2 3 2 =>2=>2=>2
14 rows selected.
この例ではわかりましたが、私は簡単に言葉で言い表せません。
@Boneist - 右!私は明確にするために編集します。ありがとう! – mathguy
ありがとうmathguyとBoneist。 私が言ったように、私は修正を探していません、私はそれを引き起こす原因を理解しようとしています。私はパスで接続して遊んで、私がそれを理解することができるかどうかを見てみましょう... –
@MattKnowles - 私はあなたの質問への修正としてそれを提供しませんでした - 私は説明の一部としてそれを提供しましたあなたが見たもののリンクをたどってそこからリンクすれば、「特定の問題を解決するためにどのように使用されているか」ではなく、「これがどのように機能するか」に関する議論があることがわかります。あなたがやっているように、自分で演奏することも、確かに多くの助けになります。がんばろう! – mathguy