当前位置:首页 » 编程语言 » sql打印树
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql打印树

发布时间: 2023-05-24 03:59:21

‘壹’ sql怎么实现树查询

CREATE TABLE T (CID VARCHAR(5),PID VARCHAR(5),CNAME VARCHAR(20))
GO
INSERT INTO T VALUES ('1','0','董事长')
INSERT INTO T VALUES ('2','1','CEO')
INSERT INTO T VALUES ('3','2','销售经理')
INSERT INTO T VALUES ('4','2','IT经理')
INSERT INTO T VALUES ('5','2','运营经理')
INSERT INTO T VALUES ('6','3','销售主管')
INSERT INTO T VALUES ('7','4','IT主管')
INSERT INTO T VALUES ('8','5','运营主管 ')
INSERT INTO T VALUES ('9','6','业务员')
INSERT INTO T VALUES ('10','7','程序员')
INSERT INTO T VALUES ('11','8','运营员')
GO

CREATE FUNCTION F(@CID INT)
RETURNS VARCHAR(50)
AS
BEGIN
DECLARE @R VARCHAR(50)
SELECT @R=PID+'.'+CID FROM T WHERE CID=@CID
WHILE EXISTS(SELECT 1 FROM T WHERE CID=(SELECT PID FROM T WHERE CID=@CID))
BEGIN
SELECT @CID=PID FROM T WHERE CID=@CID
SELECT @R=PID+'.'+@R FROM T WHERE CID=@CID
END
RETURN @R
END
GO

SELECT * FROM T WHERE DBO.F(CID) LIKE '%.2.%'
GO
DROP TABLE T
DROP FUNCTION F

提供个大概的思路,具体你还可以优化,把 LIKE里面的2换成其他CID既可查询对应的下属信息

‘贰’ 如何用sql语句实现树形的数据库表查询

如果树的层数固定就可以用语句查询,但效率比较低。例如你说的三层:
select id,v2.name+name from t1 inner join
(select id,v1.name+name as name from t1 inner join
(select id,name from t1 where parentid = 0) v1 on t1.parentid = v1.id) v2 on t1.parentid = v2.id

‘叁’ sql怎么实现树查询

表格式如下:

cid pid cname
1 0 董事长
2 1 CEO
3 2 销售经理
4 2 IT经理
5 2 运营经理
6 3 销售主管
7 4 IT主管
8 5 运营主管
9 6 业务员
10 7 程序员
11 8 运营员

create function get_detail(
@id int
)returns @re table(id int,level int)
as
begin
declare @l int
set @l=0
insert @re select @id,@l
while @@rowcount>0
begin
set @l=@l+1
insert @re select a.cid,@l
from table_2 a,@re b
where a.pid=b.id and b.level=@l-1
end
return
end
go

--调用(查询所有的子)
select a.*,level=b.level from table_2 a,get_detail(2)b where a.cid=b.id

‘肆’ sql 查询 tree

很高兴回答你的问题
根据你的需求,写的SQL如下:
select id,LPAD(name,LENGTH(name)+(LEVEL*10),' ')
from table_name
where 1=1 start with fid is null connect by PRIOR id=fid;
根据你的问题补充:
select id from table_name where id not in(
select id
from table_name
where 1=1 start with id=1 connect by PRIOR id=fid);上边这个sql就查询出来当id=1的时候,能作为它上级的id,
希望对你有所帮助!

‘伍’ 如何用SQL解决树查询问题,急!!!

oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

select * from tablename start with cond1
connect by prior cond2
where cond3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:
id,parentid。那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。

COND3是过滤条件,用于对返回的所有记录进行过滤。