Oracle start with…connect by prior

Oracle中start with…connect by prior子句用法connect by 是结构化查询中用到的,其基本语法是

select column_name from tablename
start with 条件1
connect by 条件2
where 条件3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:org_id,parent_id,那么通过表示每一条记录的parent是谁,就可以形成一个树状结构,用上述语法的查询可以取得这棵树的所有记录。

prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。

实际使用

在项目中我们经常用到层级编码,例如:301090213,他其实是一个按照每2个数值分割的一种树形数据结构,在实际使用中我们希望通过301090213这个编码找出它所对应的所有父级数据。

常规情况我们会使用Like关键字来直接查找,这里其实Oracle提供了树形查找的方式。

我们其实可以这样写代码即可

SELECT * invname from
  bd_invcl
  start WITH pk_invcl = 'pk'
  connect by invcode = prior substr(invcode, 0, length(invcode) -2);

拼接字符

SELECT wm_concat(invname) from
   bd_invcl
   start WITH pk_invcl = 'pk'
   connect by invcode = prior substr(invcode, 0, length(invcode) -2);

There are no comment yet.

HTML tag cannot be used in this comment.