(数値?)b
のテーブルである、から始めます。これは、月が切り捨てられた日付です(つまり、日はすべてに設定されます)。エイリアスは、句によって決定されます。たとえば、次のようになります。MY_AREA
MY_MONTH
01
ROWNUM
ORDER BY
ORDER BY MY_AREA, MY_MONTH DESC
+----------+---------+-----------+
| ORDERING | MY_AREA | MY_MONTH |
+----------+---------+-----------+
| 1 | 10 | 01-SEP-12 |
| 2 | 10 | 01-JAN-12 |
| 3 | 12 | 01-AUG-12 |
| 4 | 12 | 01-JUN-12 |
| 5 | 12 | 01-MAY-12 |
| 6 | 12 | 01-JAN-12 |
| 7 | 12 | 01-JAN-10 |
+----------+---------+-----------+
このWHERE
句は後になるまで機能しないので、に進んでください。START WITH
これは、のみを示してい1 = 1
ます。これは、のすべての行がb
クエリで使用されることを意味します。ここで別の条件があった場合、たとえばmy_area < 5
、または何かがあった場合、特定の行のセットのみが使用されます。
ここで、CONNECT BY
階層を構築する方法を決定する。これは、階層内の前のレベルを参照するようにDBに指示するWHERE
特別なキーワードを除いて、句のように機能します。PRIOR
それで:
PRIOR MY_AREA = MY_AREA
子ノードが`MY_AREA'に対して同じ値を持っている必要があることを意味します
PRIOR ORDERING = ORDERING - 1
子は、の順序で現在のノードの1行後に来る必要があることを意味します。b
PRIOR MY_MONTH <= ADD_MONTHS(MY_MONTH, 6)
つまり、階層に参加するにMY_MONTH
は、現在のノードの日付から6か月以内である必要があります。
次に、階層全体が作成されます。LEVEL
(特別なCONNECT BY
...)は階層内のレベルに設定され、その階層のルートの値をCONNECT_BY_ROOT
与え、それをにエイリアスします。この後、テーブルは次のテーブルのようになります。わかりやすくするために、階層ごとに区切り文字を追加しました。MY_MONTH
MY_LABEL
+-------+-----------+----------+---------+-----------+
| LEVEL | MY_LABEL | ORDERING | MY_AREA | MY_MONTH |
+-------+-----------+----------+---------+-----------+
| 1 | 01-SEP-12 | 1 | 10 | 01-SEP-12 |
+-------+-----------+----------+---------+-----------+
| 1 | 01-JAN-12 | 2 | 10 | 01-JAN-12 |
+-------+-----------+----------+---------+-----------+
| 1 | 01-AUG-12 | 3 | 12 | 01-AUG-12 |
| 2 | 01-AUG-12 | 4 | 12 | 01-JUN-12 |
| 3 | 01-AUG-12 | 5 | 12 | 01-MAY-12 |
| 4 | 01-AUG-12 | 6 | 12 | 01-JAN-12 |
+-------+-----------+----------+---------+-----------+
| 1 | 01-JUN-12 | 4 | 12 | 01-JUN-12 |
| 2 | 01-JUN-12 | 5 | 12 | 01-MAY-12 |
| 3 | 01-JUN-12 | 6 | 12 | 01-JAN-12 |
+-------+-----------+----------+---------+-----------+
| 1 | 01-MAY-12 | 5 | 12 | 01-MAY-12 |
| 2 | 01-MAY-12 | 6 | 12 | 01-JAN-12 |
+-------+-----------+----------+---------+-----------+
| 1 | 01-JAN-12 | 6 | 12 | 01-JAN-12 |
+-------+-----------+----------+---------+-----------+
| 1 | 01-JAN-10 | 7 | 12 | 01-JAN-10 |
+-------+-----------+----------+---------+-----------+
したがって、ご覧のとおり、各行は独自の階層の最上位に表示され、すべてのノードがそのCONNECT BY
下の基準を満たしています。
最後に、WHERE
句が適用されます。これにより、すべての> 3
階層のすべてのレベルが切り取られるため、最大3つのレベルが残ります。これは、中間階層の1つの行(LEVEL
= 4の行)にのみ影響します。