MSSQL,Oracle 中,对应的RPAD,LPAD的功能函数进行字符补充

这函数用于输出树杈真是超级方便,就是性能上没测试,有试过的给个回复。

直接看语句吧:

Oracle:

select t.id,'|-'||LPAD('--', 2*(LEVEL-1),'-')||t.name from T_SYS_ORG t start with t.parentid is null and t.status = 1 
connect by prior t.id = t.parentid ORDER SIBLINGS BY t.sortorder

MSSQL:

drop table #t1
CREATE TABLE #t1  
(
 c1 varchar(20),
 c2 char(20),
 c3 int
)
GO
INSERT INTO #t1 VALUES ('2', 'a',1)
INSERT INTO #t1 VALUES ('37', 'bc',2)
INSERT INTO #t1 VALUES ('597', 'esdfsd',3)
GO
SELECT   
        c1,c2,
        '|'+REPLICATE('--', c3) + rtrim(c1) AS [aaa],
        REPLICATE('--', c3) + rtrim(c2) AS [bbb],
        rtrim(c1) + REPLICATE('--', c3) AS ccc,
        rtrim(c2) + REPLICATE('--', c3) AS ddd
FROM #t1








下面是转载的一份:


在ORACLE、MSSQL、MYSQL中树结构表递归查询的实现方法 
 
表recursion数据如下:

 id       name       parentid
1       食品分类     -1
2       肉类              1
3       蔬菜类          1
4       产品分类     -1
5       保健品          4
 6       医药              4
7       建筑              4

一 ORACLE中实现方法: 
Oracle中直接支持,使用语句select * from tablename start with id=1 connect by  prior id(子层的列)=parentid(属于顶层的列) 语句说明: 
start with 指定层次开始的条件,即满足这个条件的行即可以作为层次树的最顶层 connect by prior指层之间的关联条件,即什么样的行是上层行的子行(自连接条件) 实例: 
select * from recursionstart with id=1 connect by prior id=parented
查询结果: 
id       name       parentid
1       食品分类     -1
2       肉类              1
3       蔬菜类          1

二 MSSQL中的实现方法 
在MSSQL中需要使用临时表和循环多次查询的方式实现. 创建函数: 
create function GetRecursion(@id int) returns @t table(     id int, 
    name varchar(50),     parentid int ) as begin 
    insert @t select * from recursion where id=@id    
while @@rowcount>0 
        insert @t select a.* from recursion as a inner join @t as b         on a.parentid=b.id and a.id not in(select id from @t) 


return end 使用方法: 
select * from GetRecursion(4)
查询结果: 
id       name       parentid
4       产品分类     -1
5       保健品          4
6       医药              4
7       建筑              4

三 MYSQL中的实现方法 查询语句: 
select b.id,b.name,b.parentid from recursion as a, recursion as b where  a.id=b.parentid and (a.id=1 or b. parentid =1) (查询parentid为某个值的所有子节点)
查询结果: 
id       name       parentid
2       肉类             1
3       蔬菜类         1 

四 在ORACLE、MSSQL、MYSQL中可以使用下面的查询语句只返回树结构表的子结点数据

select * 
  from tablename t  where not exists (select 'X' 
          from tablename t1, tablename t2          where t1.id = t2.parentid            and t1.id = t.id) (应该说是叶子节点)

如: select * 
  from recursion t 
 where not exists (select 'X' 
          from recursion t1, recursion t2          where t1.id = t2.parentid            and t1.id = t.id)

查询结果: 
id       name       parentid
2       肉类             1
3       蔬菜类         1
5       保健品         4
6       医药             4
7       建筑             4 

五 在ORACLE、MSSQL、MYSQL中可以使用下面的查询语句只返回树结构表的根结点数据

select * 
  from tablename t 
 where not exists (select 'X' 
          from tablename t1, tablename t2          where t1.id = t2.parentid            and t1.id = t. parentid) (一级栏目列表)

如: select * 
  from recursion t 
 where not exists (select 'X' 
          from recursion t1, recursion t2          where t1.id = t2.parentid            and t1.id = t. parentid)

查询结果: 
id       name       parentid
1       食品分类    -1
4       产品分类    -1 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值