如何选出所有子类?

ytn 2005-10-31 01:58:18
表中有一字段是父类的ID,如下:
分类ID ,父类ID
ID pID
A01001 A01
A01002 A01
A01 A1
... ...


(ID 是主键)
要选出某类的所有子类,SQL语句怎么写简便点?
...全文
152 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyh_a 2006-02-24
  • 打赏
  • 举报
回复
子类查父类怎么查
waterfirer 2005-10-31
  • 打赏
  • 举报
回复
函数,老大的函数
--测试数据
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,'山东省'
UNION ALL SELECT '002','001','烟台市'
UNION ALL SELECT '004','002','招远市'
UNION ALL SELECT '003','001','青岛市'
UNION ALL SELECT '005',NULL ,'四会市'
UNION ALL SELECT '006','005','清远市'
UNION ALL SELECT '007','006','小分市'
GO

--查询指定节点及其所有子节点的函数
CREATE FUNCTION f_Cid(@ID char(3))
RETURNS @t_Level TABLE(ID char(3),Level int)
AS
BEGIN
DECLARE @Level int
SET @Level=1
INSERT @t_Level SELECT @ID,@Level
WHILE @@ROWCOUNT>0
BEGIN
SET @Level=@Level+1
INSERT @t_Level SELECT a.ID,@Level
FROM tb a,@t_Level b
WHERE a.PID=b.ID
AND b.Level=@Level-1
END
RETURN
END
GO

--调用函数查询002及其所有子节点
SELECT a.*
FROM tb a,f_Cid('002') b
WHERE a.ID=b.ID
/*--结果
ID PID Name
------ ------- ----------
002 001 烟台市
004 002 招远市
--*/
ytn 2005-10-31
  • 打赏
  • 举报
回复
SQL语句怎么用递归写?能给出例子吗
waterfirer 2005-10-31
  • 打赏
  • 举报
回复
递归
ytn 2005-10-31
  • 打赏
  • 举报
回复
确实很麻烦,子类的级数是不定的,可能是一级,也可能是三四级,但ID就是这样编的,没办法改了。
zxbyhcsdn 2005-10-31
  • 打赏
  • 举报
回复
某一个类有多个子类,每一个子类又有多个子类,子又有多个子,

麻烦大了
zxbyhcsdn 2005-10-31
  • 打赏
  • 举报
回复
ID没有规律就成了树了,
这个要递规才的行,

麻烦的要死人,

建议还是改成有规律的好
ytn 2005-10-31
  • 打赏
  • 举报
回复
对,ID是没有规律的,有可能是A03,A0201,
Alang_79 2005-10-31
  • 打赏
  • 举报
回复
楼主的ID是没有规律的
从 A01 A1 这条记录可以看出来。
samfeng_2003(风云)兄的方法好像行不通哦。
samfeng_2003 2005-10-31
  • 打赏
  • 举报
回复
错了!应该是select * from 表 where id like 'A01%'
少了%
samfeng_2003 2005-10-31
  • 打赏
  • 举报
回复
select * from id where id like 'A01'

22,198

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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