一些经典的SQL

来源:互联网 发布:淘宝在哪里开店 编辑:程序博客网 时间:2024/05/14 04:12

表结构:部门deptid,父级部门parentdeptid,。。。。数据库的每一条记录都记录了自身ID和父级部门ID,现在要从某个部门查询其下属部门生成一棵部门关系树,sql如下:

select so.orgid,so.parentdeptid,so.orgname from sys_orginfo so start with so.orgid=xxx connect by prior so.orgid=so.parentdeptid;

xxx表示查询的部门ID。

如果知道某部门的ID,想查询出其父级部门以及父级的父级,也就是进行回溯找到根,sql如下:

select so.orgid,so.parentdeptid,so.orgname from sys_orginfo so start with so.orgid=xxx connect by prior so.parentdeptid=so.orgid;

XXX表示从那个部门开始进行回溯

两条SQL的区别就是connect by的条件交换一下。

回溯结果查出来的是父级关系的多行数据(ORACLE列转行,列合并),现在想把部门连接到一行显示,比如C的父级是B,B的父级是A,现在想拼成A/B/C sql如下:

select replace(wmsys.wm_concat(orgname),',','/') from (select so.orgid,so.parentdeptid,so.orgname from sys_orginfo so start with so.orgid=xxx connect by prior so.parentdeptid=so.orgid) ;

ORACLE的wmsys包下面的wm_concat()函数能把指定的列数据用逗号连接成一行。