◎筱米加步枪◎.Blog

Happy coding

Oracle 树状查询

在实际应用中,经常利用数据库保存树状结构的数据,通常用一张表中的两个字段表示,一个是自身的ID,一个是保存父类的ID。在这样具有这种关系中的数据,要求查出的数据具有我们想要的树状显示。这里需要引入Oracle的一个查询语句。

Select  *  from tablename
  start with [condition1]
  Connect By Prior  [condition2]
  where [condition3] 

condition1 通常是用于筛选某颗树或者多颗树的结点,这里所的树包括子树,

condtion2 通常是用于连接父结点和子结点的关系,prior 所表示的是上一条记录,通常用法:prior id = pid,(上一条的的ID号是本条记录的父类ID号)这样就把整个树状结构给建立起来了。

conditon3 就是我们通常的where语句,过滤某些记录。

现在看下具体例子。

其中Test_ID 表示本身的ID,Test_PID表示父类的ID

这边记录的描述成树状结构就是如下:

现在,假设我们查询的福州以及福州下的所有子东西,就可以这样查询,

只要取福州的根结点就可以,福州的根结点翻译成数据库中存的数据就是 test_id =1

因此得到的sql如下:

Select * From Test_ t 
  Start With Test_Id = 1
  Connect By Prior Test_Id = Test_Pid

查询结果:

用结构图表示就是如下信息:

因此想要查询某些信息,只要抓住根结点的条件就可以。。Over~~