通过叶子节点,搜索所有父亲节点。最后再相加的sql语句。
2012-03-10 10:00
218 查看
WITH t1 AS (SELECT itemid, name, levelno, superitemid FROM t_pubagency WHERE itemid IN (SELECT DISTINCT agency FROM t_fmvchrecordsfzc WHERE accountid=2273)), t2 AS (SELECT itemid, name, levelno, superitemid FROM t_pubagency WHERE itemid IN (SELECT superitemid FROM t1)), t3 AS (SELECT itemid, name, levelno, superitemid FROM t_pubagency WHERE itemid IN (SELECT superitemid FROM t2)), t4 AS (SELECT itemid, name, levelno, superitemid FROM t_pubagency WHERE itemid IN (SELECT superitemid FROM t3)), t5 AS (SELECT itemid, name, levelno, superitemid FROM t_pubagency WHERE itemid IN (SELECT superitemid FROM t4)) SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t1 UNION SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t2 UNION SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t3 UNION SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t4 UNION SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t5 ORDER BY id
说明 t1选出所需要的叶子节点,t2为二级父节点,t3为三级父节点,t4为四级,t5为五级。
限制:有级次的限制,且代码比较长。
改进后:
WITH t1 AS ( select itemid, name,levelno ,superitemid from t_pubagency where itemid IN (SELECT DISTINCT agency FROM t_fmvchrecordsfzc WHERE accountid=2273)), ), t2 AS ( select itemid, name,levelno from t_pubagency start with itemid IN (select superitemid from t1) connect by prior superitemid=itemid order by code ) SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t1 UNION SELECT itemid AS ID, name AS TEXT, levelno AS JC FROM t2 order by id
改进后的方法中用到了,递归查询:
start with itemid IN (select superitemid from t1)
connect by prior superitemid=itemid order by code
大大减少了代码量。
相关文章推荐
- 一条sql语句查询出树中所有叶子的指定父节点的下级节点
- sql 根据根节点遍历所有叶子
- SQL 语句递归查询 With AS 查找所有子节点
- SQL 语句递归查询 With AS 查找所有子节点
- greenplum中在master上查看底层所有节点的sql语句
- 根据根节点获取所有的子节点SQL语句
- SQL语句对表中父子节点正向和反向取所有节点
- SQL 语句递归查询 With AS 查找所有子节点
- 通过sql语句递归查找所有下级或上级用户
- SQL_存储过程——获得一棵树的所有叶子节点
- 通过sql语句 获取表的所有字段名 类型等属性
- sql通过一个节点ID得到所有子节点
- 【SQL精彩语句】SQL SERVER 2000中查询指定节点及其所有子节点的函数(表格形式显示)
- 【SQL精彩语句】SQL SERVER 2005中查询指定节点及其所有子节点的方法(表格形式显示)
- 在论坛中出现的比较难的sql问题:21(递归问题 检索某个节点下所有叶子节点)
- [Oracle PL/SQL]当数据表设计成具有父ID的时候,当需要选择所有与父ID同根生的所有节点的时候,使用的SQL语句
- SQL存储过程参数内容通过XML格式传送,把所有SQL语句操作放到一个存储过程里
- 通过SQL语句来造出两个日期之间的所有月份
- sql 语句:根据父节点查找所有子节点
- SQL 语句递归查询 With AS 查找 所有 子节点