现有类别表如下:
create table TBC_TM_CATEGORY (
CATEGORY_ID NVARCHAR2(50) not null,
SUPERIOR_ID NVARCHAR2(50) not null,
CATEGORY_NAME NVARCHAR2(50) not null,
constraint PK_TBC_TM_CATEGORY primary key (CATEGORY_ID)
)
数据如下:
Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('191', '0', '吊索类');
Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('0', '0', '工属具类别');
Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('791', '191', '扳手');Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('1896', '791', '活动扳手');
希望得到的查询结果如下:
CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME, path
191 0 吊索类 工属具类别\吊索类
0 0 工属具类别 工属具类别
791 191 扳手 工属具类别\吊索类\扳手
1896 791 活动扳手 工属具类别\吊索类\扳手\活动扳手请高人指点!如遇正解不差分!
create table TBC_TM_CATEGORY (
CATEGORY_ID NVARCHAR2(50) not null,
SUPERIOR_ID NVARCHAR2(50) not null,
CATEGORY_NAME NVARCHAR2(50) not null,
constraint PK_TBC_TM_CATEGORY primary key (CATEGORY_ID)
)
数据如下:
Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('191', '0', '吊索类');
Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('0', '0', '工属具类别');
Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('791', '191', '扳手');Insert into TBC_TM_CATEGORY
(CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME)
Values
('1896', '791', '活动扳手');
希望得到的查询结果如下:
CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME, path
191 0 吊索类 工属具类别\吊索类
0 0 工属具类别 工属具类别
791 191 扳手 工属具类别\吊索类\扳手
1896 791 活动扳手 工属具类别\吊索类\扳手\活动扳手请高人指点!如遇正解不差分!
解决方案 »
- insert 语句问题
- 求ORACLE安装文件,谢谢
- 这个SQL语句条件中是什么意思?
- 關於批量delete 的速度問題,高手進........
- 行级触发器。当新增时,字段改变
- to_char--纯小数转成字符
- 在线等。。insert的时候怎么使用序列
- 请问如何把字符串的日期'20050123101113'转换成日期格式2005-1-23 10:11:13?
- 问题解决有100分给,各位高手怎么才能在做应用程序的安装程序时“把ORACLE客户端”打进安装程序中,使其客户在安装时无需再安装ORACLE客
- 执行如下SQL是报错:错误信息是:execute immediate ls_sql缺少关键字
- 菜鸟问个语句
- update dept set dname=dname+'xxxxxxxxx' where deptno=10;
update TBC_TM_CATEGORY set superior_id=' ' where category_id = '0';category_id='0'对应的SUPERIOR_ID不能为'0',否则逻辑上混乱,请楼主思考一下:SQL语句如下:select
CATEGORY_ID , SUPERIOR_ID , CATEGORY_NAME,
SYS_CONNECT_BY_PATH(CATEGORY_NAME,'\') path
from TBC_TM_CATEGORY
start with superior_id=' '
connect by prior category_id=superior_id
select SYS_CONNECT_BY_PATH(category_name,'>') from TBC_TM_CATEGORY
start with superior_id=0
connect by prior category_id=superior_id
/*
SYS_CONNECT_BY_PATH(CATEGORY_N
>吊索类
>吊索类>扳手
>吊索类>扳手>活动扳手
>工属具类别*/
SQL> select C.CATEGORY_ID, C.SUPERIOR_ID, C.CATEGORY_NAME, C.PATH from
2 (
3 select * from
4 (
5 select level lv, CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME,
6 ltrim(sys_connect_by_path(CATEGORY_NAME,'/') , '/') PATH from TBC_TM_CATEGORY
7 connect by nocycle prior SUPERIOR_ID = CATEGORY_ID
8 ) B
9 where (CATEGORY_ID,lv) in
10 (
11 select A.CATEGORY_ID,max(A.lv) from (
12 select level lv, CATEGORY_ID, SUPERIOR_ID, CATEGORY_NAME,
13 ltrim(sys_connect_by_path(CATEGORY_NAME,'/') , '/') from TBC_TM_CATEGORY
14 connect by nocycle prior SUPERIOR_ID = CATEGORY_ID
15 )A
16 group by A.CATEGORY_ID
17 )
18 ) C
19 ;
CATEGORY_ID SUPERIOR_ID CATEGORY_NAME PATH
-------------------------------------------------- -------------------------------------------------- -------------------------------------------------- --------------------------------------------------------------------------------
0 0 工属具类别 工属具类别
1896 791 活动扳手 活动扳手
791 191 扳手 活动扳手/扳手
191 0 吊索类 活动扳手/扳手/吊索类
SQL>