查询connect by子句

时间:2015-08-05 17:24:31

标签: sql oracle

我有2张桌子

table 1 

vic_id | part 1 
----------------
11       ch
12       bo
13       dd
14       gm
15       mh
16       sh
17       vai
18       bal
19       gur
20       ma
21       ar
22       st
23       in
24       va
25       vi
table 2

 parent || child
 ---------------
  11        12
  12        13
  11        14
  14        15
  11        17
  17        15

我想要以

结尾的结构
11-14-15(ch-gm-mh) 
11-17-15(ch-vai-mh)

我希望查询计数为2

我尝试使用

connect by parent=childstart with parent,但没有得到预期的结果。

提前致谢

1 个答案:

答案 0 :(得分:0)

使用connect by的分层查询允许您将两个级别连接在一起,例如儿童祖先。在您的情况下,您似乎希望以递归方式连接从根开始并在树中降序的值。

要实现最终结果,请使用WITH查看嵌套子查询(例如,非测试查询)

WITH RECURSIVE
    roots AS ( 
       SELECT parent, part1 
       FROM table2 
       JOIN table1 on parent = vic_id
       WHERE parent NOT IN (SELECT child FROM table2)),
    res AS (
       SELECT parent cur, part1 cur_part, parent ids, part1 parts
       FROM roots 
       UNION ALL
       SELECT 
             child cur, 
             part1 cur_part,
             ids||'-'||child,
             parts||'-'||part1
       FROM res
       JOIN table2 on cur = parent
       JOIN table2 on child = vic_id
    )
SELECT ids, parts
FROM res
WHERE ids like '11%';