你贴的图片看不到,给你一个得到指定节点及其所有子节点的例子,供参考~~--测试数据 CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10)) INSERT tb SELECT '001',NULL ,N'山东省' UNION ALL SELECT '002','001',N'烟台市' UNION ALL SELECT '004','002',N'招远市' UNION ALL SELECT '003','001',N'青岛市' UNION ALL SELECT '005',NULL ,N'四会市' UNION ALL SELECT '006','005',N'清远市' UNION ALL SELECT '007','006',N'小分市' 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 招远市 --*/DROP FUNCTION f_Cid DROP TABLE tb
【企业表】中的CorpCategory字段中保存的是【分类表】中的CategoryID字段,可保存多个,
关键是,只保存这个分类的最后一级,如分类1最多有三级,则只保存第三级的分类ID 然后【企业表】中的CorpCategory字段
只会保存【分类表】表中的二级或者三级分类而我现在是需要通过一个【分类表】的CategoryID
获取所有引用了其三级或者二级分类ID的企业信息不知道是不是明白点了,表达不清楚的地方,非常抱歉~
CREATE TABLE tb(ID char(3),PID char(3),Name nvarchar(10))
INSERT tb SELECT '001',NULL ,N'山东省'
UNION ALL SELECT '002','001',N'烟台市'
UNION ALL SELECT '004','002',N'招远市'
UNION ALL SELECT '003','001',N'青岛市'
UNION ALL SELECT '005',NULL ,N'四会市'
UNION ALL SELECT '006','005',N'清远市'
UNION ALL SELECT '007','006',N'小分市'
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 招远市
--*/DROP FUNCTION f_Cid
DROP TABLE tb
这个是地址:http://photo1.bababian.com/upload12/20080802/850AF3410A207D5E3E27D217E124928C_240.jpg
http://photo1.bababian.com/upload12/20080802/F416FE8D9ACFD820D51970C35A093CE3_240.jpg
我的问题是,我获取了这些子节点,还需要一个个机械的到企业表中去匹配CorpCategory字段中,
是否包含我的子节点ID,感觉很麻烦,想请问,有没有比较好的方法。
比如:我的【企业表】的中“企业1”,
引用了【分类表】中的“分类112(CategoryID=5)”和“分类21(CategoryID=8)”
1.分类表多加一个列,用来标示分类的级别:
gree : 分 1,2,3级2.企业表的分类可以有3列,分别存放,1,2,3级的类别
parentid, categoryid, sonid这样查询的时候可以先判断这个类别是哪个等级的,然后根据等级查询相关字段-- 1级类可以查
select * from 企业表 from parentid = @categoryid -- 2级类可以查
select * from 企业表 from categoryid = @categoryid -- 3级类可以查
select * from 企业表 from sonid = @categoryid 个人看法,仅供参考
根据这点,建议表设计做下修改-- 分类表
create table t_category
(
categoryid int primary key,
catetoryname varchar(50),
parentid int, -- 父类id
gree int -- 分类等级,值为 1,2,3
)-- 企业表
create table t_company
(
cropid int primary key,
cropname varchar(50)
)-- 企业所属类别表
create table t_company_category
(
cropid int,
parentid int,-- 父类id
categoryid int , -- 类别id
sonid int -- 子类id
)-- 查询1级类下的公司
select a.* from t_company a
inner join t_company_category b on a.companyid = b.companyid
where b.parentid = @categoryid -- 查询2级类下的公司
select a.* from t_company a
inner join t_company_category b on a.companyid = b.companyid
where b.categoryid = @categoryid -- 查询3级类下的公司
select a.* from t_company a
inner join t_company_category b on a.companyid = b.companyid
where b.sonid = @categoryid 这样效率会好些,仅供参考