`

树形结构查询

    博客分类:
  • SQL
阅读更多
select id, name
  from (select SUBSTR(translate(SYS_CONNECT_BY_PATH(translate(t.name,
                                                              '-',
                                                              'tmp_'),
                                                    '-'),
                                'tmp_',
                                '-'),
                      2) name,
               t.id,
               t.store_id
          from allocations t
          where t.store_id = 2301
        connect by t.father_allocation_id = prior t.id
         start with t.father_allocation_id is null)
1.语法:
       TRANSLATE(string,from_str,to_str)
   示例
        Sql代码
     1. SELECT TRANSLATE('abcdefghij','abcdef','123456') FROM dual;
    2. TRANSLATE (
    3. --------------
    4. 123456ghij
    5.
    6. SELECT TRANSLATE('abcdefghij','abcdefghij','123456') FROM dual;
    7. TRANSL
    8. ----------
    9. 123456
  补充说明
    语法:TRANSLATE(expr,from,to)
expr: 代表一串字符,from 与 to 是从左到右一一对应的关系,如果不能对应,则视为空值。
举例:
select translate('abcbbaadef','ba','#@') from dual (b将被#替代,a将被@替代)
select translate('abcbbaadef','bad','#@') from dual (b将被#替代,a将被@替代,d对应的值是空值,将被移走)
因此:结果依次为:@#c##@@def 和@#c##@@ef
语法:TRANSLATE(expr,from,to)
expr: 代表一串字符,from 与 to 是从左到右一一对应的关系,如果不能对应,则视为空值。


2.其实SYS_CONNECT_BY_PATH这个函数是oracle9i才新提出来的!
它一定要和connect by子句合用!
第一个参数是形成树形式的字段,第二个参数是父级和其子级分隔显示用的分隔符!

START WITH 代表你要开始遍历的的节点!

CONNECT BY PRIOR 是标示父子关系的对应!


这个函数使用之前必须先建立一个树,否则无用

sys_connect_by_path(字段名, 2个字段之间的连接符号),注意这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,',')。

树: start with 条件1 connect by prior 条件2

条件1如 子=XX (或父=XX)

条件2 若: 子-->根(倒树) 则为 connect by 子 = prior 根

若 根--> 子(正树) 则 connect 根 = prior 子
  • 大小: 76.3 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics