使用树形结构的查询。

ZMAK_Chun 2012-06-04 09:32:03
表结构
id name Pid
1 通信 0
2 通信_1 1
3 通信_2 1
4 通信_3 1
5 汽车 0
6 汽车_1 5
7 移动 0
8 移动_1 7

一组树形结构,现在我传入了一组id,无序的,如何找出这个id是否为父节点,并且把这一组id中所有的子节点id显示?

比如,传入 2,1,4,7,8
显示
通信,通信_1,通信_3,移动,移动_1
...全文
142 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZMAK_Chun 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 7 楼 的回复:
引用 6 楼 的回复:

估计是你服务器跟我的排序方式不一样

我看了下代码,您这边貌似是通过
(@str,len(@str)-1)来决定排序,
现实中的资料可能有点出入..我还是看看用pid来排序的方法..谢谢了哦~


这个不是排序,是删除前导空格

SQL code
可以用
SELECT RTRIM(@str) AS Value
取代
s……
[/Quote]
我说的排序呢 不是插入顺序,,是那个父级和子级的顺序~
amazeyeli 2012-06-05
  • 打赏
  • 举报
回复
搞错了,是删除前面的逗号
amazeyeli 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

估计是你服务器跟我的排序方式不一样

我看了下代码,您这边貌似是通过
(@str,len(@str)-1)来决定排序,
现实中的资料可能有点出入..我还是看看用pid来排序的方法..谢谢了哦~
[/Quote]

这个不是排序,是删除前导空格

可以用
SELECT RTRIM(@str) AS Value
取代
select right(@str,len(@str)-1) as value
gogodiy 2012-06-05
  • 打赏
  • 举报
回复
或者这样:

CREATE TABLE t1
(
id INT,
name VARCHAR(20),
pid INT
)
INSERT INTO t1
SELECT 1, '通信', 0 UNION all
SELECT 2, '通信_1', 1UNION all
SELECT 3, '通信_2', 1 UNION all
SELECT 4, '通信_3', 1 UNION all
SELECT 5, '汽车', 0 UNION all
SELECT 6, '汽车_1', 5 UNION all
SELECT 7, '移动', 0 UNION all
SELECT 8, '移动_1', 7
SELECT * FROM t1 WHERE id IN (2,1,4,7,8) ORDER BY id

-------------------------
id name pid
1 通信 0
2 通信_1 1
4 通信_3 1
7 移动 0
8 移动_1 7
gogodiy 2012-06-05
  • 打赏
  • 举报
回复
输入无序,你可以全部插入临时表,然后order by有序查询出来即可。
ZMAK_Chun 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

估计是你服务器跟我的排序方式不一样
[/Quote]
我看了下代码,您这边貌似是通过
(@str,len(@str)-1)来决定排序,
现实中的资料可能有点出入..我还是看看用pid来排序的方法..谢谢了哦~
  • 打赏
  • 举报
回复
估计是你服务器跟我的排序方式不一样
ZMAK_Chun 2012-06-04
  • 打赏
  • 举报
回复
- -为啥我查出来是
通信,汽车,通信_1,通信_2
- -这...
  • 打赏
  • 举报
回复

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([id] int,[name] varchar(6),[Pid] int)
insert [test]
select 1,'通信',0 union all
select 2,'通信_1',1 union all
select 3,'通信_2',1 union all
select 4,'通信_3',1 union all
select 5,'汽车',0 union all
select 6,'汽车_1',5 union all
select 7,'移动',0 union all
select 8,'移动_1',7

declare @str varchar(100)
set @str=''
select @str=@str+','+[name] from test
where id in(8,4,2,7,1)
select right(@str,len(@str)-1) as value
/*
value
---------------------------------------
通信,通信_1,通信_3,移动,移动_1
*/

结果一样的
ZMAK_Chun 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

SQL code

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([id] int,[name] varchar(6),[Pid] int)
insert [test]
select 1,'通信',0 union all
select 2,'通信_1',1 uni……
[/Quote]
谢谢大神...但是输入有序的查询方法.我这边也实现了..就是想想如果输入的是无序的,是否也能按照树形的结构排列出来
  • 打赏
  • 举报
回复

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([id] int,[name] varchar(6),[Pid] int)
insert [test]
select 1,'通信',0 union all
select 2,'通信_1',1 union all
select 3,'通信_2',1 union all
select 4,'通信_3',1 union all
select 5,'汽车',0 union all
select 6,'汽车_1',5 union all
select 7,'移动',0 union all
select 8,'移动_1',7

declare @str varchar(100)
set @str=''
select @str=@str+','+[name] from test
where id in(1,2,4,7,8)
select right(@str,len(@str)-1) as value
/*
value
---------------------------------------
通信,通信_1,通信_3,移动,移动_1
*/

牛哥_ 2012-06-04
  • 打赏
  • 举报
回复
不会,期待中……

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧