在程序中很容易做到用递归的方法整理数据,但是在数据库中,用SQL语句怎么实现?下面我以最典型的树形结构来说明下如何在Oracle使用递归查询。
首先,创建一张表格:
create table TEST_COMPONENT ( COMPONENT_ID VARCHAR2(255) not null, COMPONENT_CODE VARCHAR2(255), PARENT_CODE VARCHAR2(255), COMPONENT_NAME VARCHAR2(255), ORDER_SQ NUMBER(36) )
COMPONENT_ID 主键 COMPONENT_CODE 编码 PARENT_CODE 父级编码 COMPONENT_NAME 节点名称
ORDER_SQ 排序字段
一、基本使用:
在Oracle中,递归查询要用到start with 。。。。connect by prior。。。
具体格式是:
SELECT column
FROM table_name
START WITH column=value
CONNECT BY PRIOR 父主键=子外键
本例来讲的话:
方法一(无需排序):
select a.*
from test_component a
start with a.parent_code = -1
connect by prior a.component_code = a.parent_code
方法二(需要排序):
Oracle9以后,提供了一种排序“order siblings by”就可以实现我们的需求,用法如下
select a.*
from test_component a
start with a.parent_code = -1
connect by prior a.component_code = a.parent_code
order siblings by a.order_sq asc
OKEY ,想要的结果就会完美的展现出来了,完工