恐怕得用PRO*C或者是pl/sql.
解决方案 »
- RH Linux 下oracle自动备份设置无效
- Oracle CDC 捕捉不到变化两
- 哪位大哥有《Oracle Database 10g SQL开发指南》这本书的源代码?
- oracle 11最新版本是多少?
- 关于在行级触发器中使用old的问题_在线等待,急!! 帮帮忙
- 问存储过程调用的问题,谢谢大家,在线等
- 谁能帮我解释一下这个代码???英文看不懂。
- 急!9i里的一个view的sql语句给我无意中修改了!如何恢复?
- 擂台:悬赏人民币1000.00元解决Oracle性能优化问题
- 求一条sql排序语句!
- OracleXE 如何设置/更改 NLS_NCHAR_CHARACTERSET? 汉字是乱码。
- 请教:oracle在服务里,突然起不来了,不知道怎么回事!
from T_CAL_CATEGORY a,T_CAL_CATEGORY b
where substr(a.categoryid|','|,b.CALENDARCAT)>0
看看ok?
from
(select a.categoryid , a.categoryName , a.parentid ,b.folderName ,b.folderid
from T_CAL_CATEGORY a,T_FOLDERS b
where to_char(a.categoryid)=substr(b.CALENDARCAT,1,instr(b.CALENDARCAT,',',1,1))
or instr(b.CALENDARCAT,','||to_char(a.categoryid)||',')>0) c, T_CAL_CATEGORY d
where d.parentid = 0
and c.parentid =d.categoryid
order by d.parentid ,c.folderid如果只有二级的话就应该可以这样写.我是在下张表中的记录中查询是否存在例如',2,'之类的东西,当然也要考虑第一个","前是不是2.试一下.
SQL> select * from T_CAL_CATEGORY;CATEGORYID CATEGORYNAME PARENTID SEQUENCE
---------- -------------------- ---------- --------------------
21 篮球 19 19.21
22 英超 20 19.20.22
1 休闲 0 1.
2 户外活动 1 1.2.
3 公园 1 1.3.
11 出行 0 11.
12 旅游 11 11.12.
13 交通 11 11.13.
19 体育 0 19.
20 足球 19 19.20.10 rows selectedSQL> select * from T_FOLDERS; FOLDERID FOLDERNAME CALENDARCAT
---------- -------------------------------------------------- --------------------
1 20001的主日历 2,12,
2 06年世界杯足球赛 20,
3 sdafsdfasdfas 2,3,
4 日历2 3,
5 ggggg 2,12,
6 tttttttt 22,6 rows selectedSQL> SELECT DISTINCT substr(id_path, 2, instr(id_path, '/', 2) - 2) categoryid,
2 substr(name_path, 2, instr(name_path, '/', 2) - 2) categoryName,
3 folderid,
4 folderName
5 FROM (SELECT t.*,
6 sys_connect_by_path(categoryid, '/') || '/' id_path,
7 sys_connect_by_path(categoryname, '/') || '/' name_path
8 FROM t_cal_category t
9 START WITH parentid = 0
10 CONNECT BY PRIOR categoryid = parentid) tt,
11 T_FOLDERS tf
12 WHERE instr(',' || tf.CALENDARCAT, ',' || tt.categoryid || ',') > 0
13 ORDER BY categoryid
14 /CATEGORYID CATEGORYNA FOLDERID FOLDERNAME
---------- ---------- ---------- --------------------------------------------------
1 休闲 1 20001的主日历
1 休闲 3 sdafsdfasdfas
1 休闲 4 日历2
1 休闲 5 ggggg
11 出行 1 20001的主日历
11 出行 5 ggggg
19 体育 2 06年世界杯足球赛
19 体育 6 tttttttt8 rows selected
categoryid int,
categoryName varchar(20),
parentid int ,
sequenc varchar(20)
)
create table #tab2(
folderid int ,
folderName varchar(20),
calendarat varchar(20)
)
insert into #tab1
select 1,'休闲',0,'1.' union all
select 2,'户外活动',1,'1.2.' union all
select 3,'公园',1,'1.3.' union all
select 11,'出行',0,'11.' union all
select 12,'旅游',11,'11.12.' union all
select 13,'交通',11,'11.13.' union all
select 19,'体育',0,'19.' union all
select 20,'足球',19,'19.20.'insert into #tab2
select 1,'20001的主日历','2,12,' union all
select 2,'06年世界杯足球赛','20,' union all
select 3,'sdafsdfasdfas','2,3,' union all
select 4,'日历2','3,' union all
select 5,'ggggg','3,12,'
--查询
select aa.categoryid,aa.categoryName,bb.folderid,bb.folderName from (select * from #tab1 where parentid=0)aa
inner join
(
select * from #tab1 a
inner join
#tab2 b on charindex(cast(a.categoryid as varchar(10))+',',b.calendarat)>0
)bb on aa.categoryid=bb.parentid
group by aa.categoryid,aa.categoryName,bb.folderid,bb.folderName--删除
drop table #tab1
drop table #tab2/*
categoryid categoryName folderid folderName
----------- -------------------- ----------- --------------------
1 休闲 1 20001的主日历
1 休闲 3 sdafsdfasdfas
1 休闲 4 日历2
1 休闲 5 ggggg
11 出行 1 20001的主日历
11 出行 5 ggggg
19 体育 2 06年世界杯足球赛
*/
select aa.categoryid,aa.categoryName,bb.folderid,bb.folderName from (select * from #tab1 where parentid=0)aa
inner join
(
select * from #tab1 a
inner join
#tab2 b on charindex(cast(a.categoryid as varchar(10))+',',b.calendarat)>0
)bb on aa.categoryid=left(bb.sequenc,charindex('.',bb.sequenc)-1)
group by aa.categoryid,aa.categoryName,bb.folderid,bb.folderName
where to_char(a.categoryid)=substr(b.CALENDARCAT,1,instr(b.CALENDARCAT,',',1,1))改为:where to_char(a.categoryid)=substr(b.CALENDARCAT,1,instr(b.CALENDARCAT,',',1,1)-1)
或者整个的SQL改为:select distinct d.categoryid ,d.categoryName ,c.folderid,c.folderName
from
(select a.categoryid , a.categoryName , a.parentid ,b.folderName ,b.folderid
from T_CAL_CATEGORY a,T_FOLDERS b
where instr(','||b.CALENDARCAT,','||a.categoryid||',')>0) c, T_CAL_CATEGORY d
where d.parentid = 0
and c.parentid =d.categoryid
order by d.parentid ,c.folderid