查询问题(50分)

  • 主题发起人 主题发起人 mylixin
  • 开始时间 开始时间
M

mylixin

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一部门表,其中包括不同等级的部门,这些部门之间只有一个(上级部门编码)字段,
并且部门编码没有规律(有规律的我已经会了),类似一颗二叉树。
需要查询出:已知其中一个部门,求他所有的下级部门、下级的下级部门。。。。

 
假如你想要通过一条SQL解决可能比较难。除非你知道最多有几级。
假如不知道,你只能通过Cursor解决。
 
用递归的方法可以。
不过效率非常低。你可以在表里加一个字段作为这个部门的路径。
这样的效率要好一点。
 
你可以在代码上实现
比如,第一级代码用01,第二级用01.01,01.02。。。,第三级用01.01.01,01.02.01。。。
这样已知01求下级部门就可以用where id like '01%'
 
to lixijie :
就是假设不知道有多少级部门,所以请把怎样用Cursor说详细一点好吗?
to Flintstone:
我的朋友也说可以用递归能够实现,但是我们都没能写出来,你能贴点代码吗?
to ericimex01:
我需要知道的是怎样在编码没有规律的情况下求得,因为如果部门分很多级的话,
那么将会很长

谢谢
 
WITH Temp (部门编码,上级部门编码) as
(SELECT 部门编码,上级部门编码
FROM 部门表
WHERE 部门编码=??
UNION ALL
SELECT B.部门编码,A.上级部门编码
FROM 部门编码 A,Temp B
WHERE B.上级部门编码=A.部门编码)
SELECT 部门编码 FROM 部门表 where 部门编码 in (select 部门编码 from Temp)
UNION
SELECT 部门编码 FROM 部门表
WHERE 部门编码=??
 
刚才是在DB2中的SQL语句,在其它数据库中可以修改
 
类似bom单展开的问题,请参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1262996
 
后退
顶部