精华内容
下载资源
问答
  • mysql 实现 start with

    千次阅读 2021-01-18 19:47:50
    传入map(idsql,rssql,prior) idsql 查询id rssql 查询结果集 调用 以下方法@param ids 要查询的起始 start with* @param allres 包含要递归数据的结果集 ( 查询时别名ID PID )* @param pos prior---> UP or DOWN...

    自己写service----> 传入map(idsql,rssql,prior)   idsql 查询id   rssql 查询结果集    调用 以下方法

    @param ids 要查询的起始 start with

    * @param allres 包含要递归数据的结果集 ( 查询时别名ID PID )

    * @param pos prior---> UP or DOWN

    * @return

    */

    public static List> getTree(ArrayList ids,

    List> allres,String pos) {

    List> res=new ArrayList>();

    if("up".equals(pos)){

    res=toCreatTreeUp(ids,allres,res);

    }

    if("down".equals(pos)){

    res=toCreatTreeDown(ids,allres,res);

    }

    return res;

    }

    private static List> toCreatTreeUp(ArrayList ids,

    List> allres,List> res) {

    ArrayList idss = new ArrayList();

    for(String id :ids){

    for (Map map : allres) {

    if(id.equals(map.get("ID").toString())){

    idss.add(map.get("PID").toString());

    res.add(map);

    }

    }

    }

    if (idss.size()!=0) {

    ids = idss;

    res = toCreatTreeUp(ids,allres,res);

    }

    return res ;

    }

    private static List> toCreatTreeDown(ArrayList ids,

    List> allres,List> res) {

    ArrayList idss = new ArrayList();

    for(String id :ids){

    for (Map map : allres) {

    if(id.equals(map.get("ID").toString())){

    res.add(map);

    }

    if(id.equals(map.get("PID").toString())){

    idss.add(map.get("ID").toString());

    }

    }

    }

    if (idss.size()!=0) {

    ids = idss;

    res = toCreatTreeDown(ids,allres,res);

    }

    return res ;

    }

    展开全文
  • 先留个疑问 用另一篇文章总结的分为四种情况: 第一种:start with 子节点ID='...' connect by prior 子节点ID = 父节点ID select * from mdm_organization o start with o.org_code='10000008' connect by prior o....

    这个子句主要是用于B树结构类型的数据递归查询,给出B树结构类型中的任意一个结点,遍历其最终父结点或者子结点。

    先看原始数据:

    create table a_test

    ( parentid varchar2(10),

    subid varchar2(10));insert into a_test values ( '1', '2' );insert into a_test values ( '1', '3' );insert into a_test values ( '2', '4' );insert into a_test values ( '2', '5' );insert into a_test values ( '3', '6' );insert into a_test values ( '3', '7' );insert into a_test values ( '5', '8' );insert into a_test values ( '5', '9' );insert into a_test values ( '7', '10' );insert into a_test values ( '7', '11' );insert into a_test values ( '10', '12' );insert into a_test values ( '10', '13' );commit;select * from a_test;

    3fa9ae41e1538f01b322c4940a697b6b.png

    对应B树结构为:

    fab5af3c6a6d56f2c52a2e28349ecbe0.png

    接下来看一个示例:

    要求给出其中一个结点值,求其最终父结点。以7为例,看一下代码

    340c60004d81fc4addc5917295b034d5.png

    start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然。

    connect by 子句:连接条件。关键词prior,prior跟父节点列parentid放在一起,就是往父结点方向遍历;prior跟子结点列subid放在一起,则往叶子结点方向遍历,

    parentid、subid两列谁放在“=”前都无所谓,关键是prior跟谁在一起。

    order by 子句:排序,不用多说。

    --------------------------------------------------

    下面看看往叶子结点遍历的例子:

    c5e89f30d05cb17a00fcefdc1847d570.png

    这里start with 子句用了parentid列,具体区别后面举例说明。

    connect by 子句中,prior跟subid在同一边,就是往叶子结点方向遍历去了。因为7有两个子结点,所以第一级中有两个结果(10和11),10有两个子结点(12,13),11无,所以第二级也有两个结果(12,13)。即12,13就是叶子结点。

    下面看下start with子句中选择不同的列的区别:

    以查询叶子结点(往下遍历)为例

    8ce5d0ae1370a1798deac59a84638666.png

    结果很明显,原意是要以7为父结点,遍历其子结点,左图取的是父结点列的值,结果符合原意;右图取的是子结点列的值,结果多余的显示了7 的父结点3.

    ---------------------------------------

    关于where条件的语句,以后验证后再记录。先留个疑问

    69627db24c7b4255fdbff3b3be5f9f51.png

    用另一篇文章总结的分为四种情况:

    第一种:start with 子节点ID='...' connect by prior 子节点ID = 父节点ID

    select * from mdm_organization o start with o.org_code='10000008' connect by prior o.org_code=o.org_parent_code

    按照条件org_code='10000008',对'10000008'(包括自己)及其子节点进行递归查询,结果如下

    e3a0840bf28b68cd22a9f92caee60d14.png

    查询结果自己所有的后代节点(包括自己)。

    第二种:start with 子节点ID='...' connect by 子节点ID = prior 父节点ID

    select * from mdm_organization o start with o.org_code='10000008' connect by o.org_code=prior o.org_parent_code

    按照条件org_code='10000008',对'10000008'(包括自己)及其父节点进行递归查询,结果如下

    80f44b14631ff0bef8c649201e129610.png

    查询结果自己所有的前代节点(包括自己)。

    第三种:start with 父节点ID='...' connect by prior 子节点ID = 父节点ID

    select * from mdm_organization o start with o.org_parent_code='10000008' connect by prior o.org_code=o.org_parent_code

    按照条件org_parent_code='10000008',对'10000008'(不包括自己)子节点进行递归查询,结果如下

    b8319859e232b3534a2ad17c4abbd720.png

    查询结果自己所有的后代节点(不包括自己)。

    第四种:start with 父节点ID='...' connect by 子节点ID = prior 父节点ID

    select * from mdm_organization o start with o.org_parent_code='10000008' connect by o.org_code = prior o.org_parent_code

    按照条件org_parent_code='10000008',对'10000008'(包括自己)的第一代孩子们及其父节点进行递归查询,结果如下

    a89984fae041c1ab7ef674171e0d403b.png

    查询结果自己的第一代后节点和所有的前代节点(包括自己)。

    如果有where 条件,如下

    select * from mdm_organization o where 条件 start with o.org_parent_code='10000008' connect by o.org_code = prior o.org_parent_code

    执行顺序为先执行start with connect by prior,然后再按照where条件进行过滤。

    参考文章:

    https://www.cnblogs.com/benbenduo/p/4588612.html

    https://www.cnblogs.com/lirun/p/9116337.html

    展开全文
  • Oracle高级篇之start with关键字的用法 一,基本语法 SELECT ... FROM + 表名 START WITH + 条件1 CONNECT BY PRIOR + 条件2 WHERE + 条件3 条件1:是根节点的限定语句,当然可以放宽限定条件,以取得多个根节点,也...

    Oracle高级篇之start with关键字的用法 一,基本语法 SELECT ... FROM    + 表名 START WITH         + 条件1 CONNECT BY PRIOR   + 条件2 WHERE              + 条件3 条件1:是根节点的限定语句,当然可以放宽限定条件,以取得多个根节点,也就是多棵树;在连接关系中,除了可以使用列明外,还允许使用列表达式。 START WITH 子句为可选项,用来标识哪个节点作为查找树形结构的根节点。若该子句省略,则表示所有满足查询条件的行作为根节点。 条件2:是连接条件,其中用PRIOR表示上一条记录,例如CONNECT BY PRIOR STUDENT_ID = GRADE_ID,意思就是上一条记录的STUDENT_ID是本条记录 的GRADE_ID,即本记录的父亲是上一条记录。CONNECT BY子句说明每行数据将是按照层次顺序检索,并规定将表中的数据连入树形结构的关系中。 PRIOR运算符必须放置在连接关系的2列中某一个的前面。对于节点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查 找树结构的顺序是自顶向下,还是自底向上。 条件3:是过滤条件,用于对返回的记录进行过滤。 1,定义查找起始节点     在自顶向下查询树状结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始,向下查找。这样查找的结果就是以该节点为开始 的结构是树的一枝。 看一个例子: SELECT * FROM STUDENT START WITH STUDENT_ID = '00001' CONNECT BY PRIOR STUDENT_ID = GRADE_ID; 1,CONNECT BY PRIOR是结构化查询中用到的; 2,START WITH... CONNECT BY PRIOR...的作用,简单来说,就是将一个树状结构存储在一张表里。     假如一个表里存在2个字段:STUDENT_ID(学生ID)、GRADE_ID(班级ID),那么我们可以通过表示每一个学生属于哪一个班级,来形成一个树状 结构,通过START WITH... CONNECT BY PRIOR...语法,就可以取得这棵树的所有记录。 --自顶向下 以BRH_ID = '0003'这个节点为根节点,向下查询 SELECT * FROM IM_BRANCH START WITH BRH_ID = '0003' CONNECT BY PRIOR BRH_ID = BRH_PARENTID --自底向上 以BRH_ID = '0003'这个节点为叶节点,向上查询 SELECT * FROM IM_BRANCH START WITH BRH_ID = '0003' CONNECT BY BRH_ID = PRIOR BRH_PARENTID 二,应用场景     START WITH... CONNECT BY PRIOR...常见的用法,是用来遍历含有父子关系的表结构中。比如省市关系,一个省 下面包含多个城市,如果城市基本信息表中,包含有属于哪个省级的字段,那么如果要遍历所有的城市,我们就可以 使用START WITH... CONNECT BY PRIOR...。

    展开全文
  • catalog start with '/archive1/';using target database control file instead of recovery catalogsearching for all files that match the pattern /archive1/List of Files Unknown to the Database===...

    RMAN> catalog start with '/archive1/';

    using target database control file instead of recovery catalog

    searching for all files that match the pattern /archive1/

    List of Files Unknown to the Database

    =====================================

    File Name: /archive1/1_67_799111702.dbf

    File Name: /archive1/1_70_799111702.dbf

    File Name: /archive1/1_66_799111702.dbf

    File Name: /archive1/1_69_799111702.dbf

    File Name: /archive1/1_68_799111702.dbf

    Do you really want to catalog the above files (enter YES or NO)? yes

    cataloging files...

    cataloging done

    List of Cataloged Files

    =======================

    File Name: /archive1/1_67_799111702.dbf

    File Name: /archive1/1_70_799111702.dbf

    File Name: /archive1/1_66_799111702.dbf

    File Name: /archive1/1_69_799111702.dbf

    File Name: /archive1/1_68_799111702.dbf

    RMAN-08132: WARNING: cannot update recovery area reclaimable file list

    RMAN-00571: ===========================================================

    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============

    RMAN-00571: ===========================================================

    RMAN-03009: failure of REFAF command on default channel at 01/16/2013 06:50:11

    ORA-00604: error occurred at recursive SQL level 1

    ORA-06552: PL/SQL: Compilation unit analysis terminated

    ORA-06553: PLS-553: character set name is not recognized

    RMAN> catalog start with '/archive1/';

    searching for all files that match the pattern /archive1/

    no files found to be unknown to the database

    展开全文
  • startWith() 顾名思义就是“从……开头”,默认是从下标0开始检查,也可以指定下标。下文是转的:http://blog.csdn.net/liudeqing2008/article/details/5611460今天看Java代码时,看到了字符串有一个方法是starts...
  • srm.menu_id AND srm.role_id = sr.role_id AND sr.role_id = sur.role_id AND sur.user_id = 3) t START WITH t.up_menu_id = 999999 connect BY prior menu_id = t.up_menu_id 0 999999 系统管理 11 0 菜单管理 27...
  • Oracle转PostgreSQL之start with / connect by
  • oracle 提供了start with connect by 语法结构可以实现递归查询。1. 一个简单举例:SQL> select * from test;BILL_MONTH DAY_NUMBER MSISDN-------------------- ---------- --------------------200803 ...
  • 最近接触一个老项目,最初适配的数据库是oracle 后来迁移到mysql 。...刚刚遇到了一个存储过程中有使用oracle的Start with…Connect By递归树查询的。这个函数在mysql里面是没有的。但是我们可以通过自定义函...
  • 查找根结点(自下而上)Oracle:select a.id from hrmsubcompany a start with a.id=2 connect by prior a.id = a.supsubcomid;SQL Server/DB2:WITH allsub(id,subcompanyname,supsubcomid) as (SELECT id,...
  • 1、start with connect by改写 SELECT t.* FROM pub_organ t, ( SELECT organ_id FROM ( –原来的写法 – SELECT – p.organ_id, – p.organ_type – FROM – pub_organ p START WITH p.organ_id = ‘370000...
  • endwith与startwith字符串方法匹配重写在js读取文件信息并判断文件的格式类型时出现问题,并找到解决方案,写下来与大家分享,共勉。---DanlV描述本人在上传MP3格式文件时,需要判断用户上传的是不是MP3格式文件,...
  • 这个问题的处理方法就是 @server.route("FAT", methods=['get', 'post'])
  • Oracle转换Mysql之start with: oracle转mysql其实很多细节,这边就不一 一 描述了,这边先整理些“坎”吧! Oracle中start with … : select * from grade_group gg start with gg.group_code=#{groupCode} ...
  • Oracle中select from where start with connect by prior子句用法connect by 是’结构化查询’中用到的,其基本语法是:select ... from tablename where 条件3 start with 条件1 connect by 条件2;例:select * ...
  • startwith函数怎么使用

    2021-04-20 01:35:01
    JavaScript中的str.startsWith()函数用于检查给定的字符串是否以指定字符串的字符开头。下面我们就来看看startsWith()函数的具体使用方法。我们先来看一下startsWith()函数的基本语法str.startsWith(searchString , ...
  • select * from MBRC_REPORTTEMPLATE t start with t.id=517828 connect by prior t.pid=t.id union select * from MBRC_REPORTTEMPLATE t start with t.id=517828 connect by prior t.id=t.pid; 1.首先start with ...
  • START WITH ORG_LEVEL = '01' --机构层级 CONNECT BY PRIOR ORG_CODE = PARENT_CODE; 该造后(展示字段个数需要上下一致): WITH RPL (ORG_CODE,PARENT_CODE) AS ( SELECT ROOT.ORG_CODE,ROOT.PARENT_CODE FROM...
  • javax.crypto.BadPaddingException: Data must start with zero 图一和图二的区别是,图一是对String p 字符串解密,图二是对String p22字符串解密,字符串p 和p22 的区别在于,将p中的空格替换为+ 所以只需要...
  • 原因是:PARENT_ID =id这个条件写返了应该是id=PARENT_ID 改完之后就正常了
  • 天萃荷净OracleSQL查询过滤语句connect by…start with…的使用案例一、Oracle SQL过滤语句语法大致写法:select * from some_table [where 条件1] connect by [条件2] start with [条件3];其中 connect by 与 start...
  • SELECT STAFF2FROM BFM_STAFF_RELA A1WHERE A1.RELA = 1START WITH A1.STAFF1 = 655CONNECT BY PRIOR A1.STAFF2 = A1.STAFF1;SELECT STAFF2FROM BFM_STAFF_RELA A1START WITH A1.STAFF1 = 655CONNECT BY PRIOR A1.S....
  • 英文:PEP 8: E265 block comment should start with '# ’ 中文:块注释应以“#”开头 解决方案:# 后面加上空格。
  • from sphfile import SPHFile import os def get_wave_path(wav_path): wave_files = [] for (dirpath, dirname, filenames) in os.walk(wav_path): for filename in filenames: if filename.endswith('....
  • npm WARN old lockfile The package-lock.json file was created with an old version of npm, npm WARN old lockfile so supplemental metadata must be fetched from the registry. npm WARN old lockfile npm ...
  • Didn't start with 'is', 'get' or 'set'.] 错误代码: LambdaQueryWrapper<DaveUser> lambdaQueryWrapper = new LambdaQueryWrapper(); lambdaQueryWrapper.orderByDesc(daveUser->daveUser.getCreateTime()) .eq...
  • 如图: 这是因为地址需要加上redis://前缀,如图: 加上就好了。 如果连接redis是受保护的ssl,则应该使用rediss://代替redis://

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,144,896
精华内容 457,958
关键字:

startwith