Sql Oracle连接操作

Sql Oracle连接操作,sql,oracle,hierarchical,Sql,Oracle,Hierarchical,我已经通读了有关连接操作的文章,但我似乎无法理解现有应用程序中的数据库查询。下面是查询的简化版本 SELECT LEVEL, CONNECT_BY_ROOT MY_MONTH MY_LABEL, b.* FROM ( SELECT ROWNUM AS ORDERING, MY_AREA, TRUNC (THE_MONTH, 'MONTH') AS MY_MONTH FROM MY_TABLE ORD

我已经通读了有关连接操作的文章,但我似乎无法理解现有应用程序中的数据库查询。下面是查询的简化版本

SELECT LEVEL,
       CONNECT_BY_ROOT MY_MONTH MY_LABEL,
       b.*
FROM (
    SELECT ROWNUM AS ORDERING, 
           MY_AREA,
           TRUNC (THE_MONTH, 'MONTH') AS MY_MONTH
    FROM MY_TABLE
    ORDER BY MY_AREA, MY_MONTH DESC
) b
WHERE LEVEL <= 3
START WITH 1 = 1
CONNECT BY PRIOR MY_AREA = MY_AREA
       AND PRIOR ORDERING = ORDERING - 1
       AND PRIOR MY_MONTH <= ADD_MONTHS(MY_MONTH, 6);
虽然我对连接功能有了基本的了解,但这种结合让我迷失了方向。有人能解释一下这个问题是怎么回事吗

我想结尾是要让所有的行都有相同的面积,行号比当前行号少1,日期比当前日期晚6个月。我猜由于行号标准,这只会返回1行,如果不满足其他标准,则返回0行。然后,也许第一个CONNECT\u BY\u ROOT表示要获取该行的“我的月”值

从b开始,b是一个表,其中包含MY_AREA a number?,MY_MONTH是一个月截断日期,即天数都设置为01,以及一个别名ROWNUM,它由ORDER by子句确定,ORDER by是MY_AREA,MY_MONTH DESC,例如:

WHERE子句直到稍后才起作用,所以继续从开始,它只表示1=1。这意味着b中的每一行都将用于查询;如果您在此处遇到其他情况,例如my_area<5或其他情况,则只会使用某一组行

现在是connectby,它决定了应该如何构建层次结构。这类似于WHERE子句,除了特殊的Previor关键字,它告诉DB查看层次结构中的上一级。因此:

PRIOR MY_AREA=MY_AREA意味着子节点必须具有与“MY_AREA”相同的值 Previor ORDERING=ORDERING-1表示子节点应该位于b的排序中的当前节点之后一行。
在我的_月之前,如果孩子必须比父母早一行,怎么会有超过两个级别?另外,您可能需要对表重新排序,首先排序是asc。面积是一个字符串。我仍然不知道排序标准。与表的第3部分一样,3个排序根包含1个排序行。这如何满足先前的排序=排序-1?哦。可能前一行是指根或最后一个子行,即最后一行是什么?Hrm。还有一些问题。我的结果的第一部分有3个级别。所有的行都包含了START with 1=1;也就是说,所有行都成为它们自己的树的根。
+----------+---------+-----------+
| 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 |
+----------+---------+-----------+
+-------+-----------+----------+---------+-----------+
| 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 |
+-------+-----------+----------+---------+-----------+