做一个无限级分类菜单,表如下:ID Name ParentID
1 合同管理 0
2 录入数据 1
3 分析统计 1
4 系统管理 0
5 用户管理 4
用一个查询怎么实现如下结果:ID Name ParentName
2 录入数据 合同管理
1 合同管理 0
2 录入数据 1
3 分析统计 1
4 系统管理 0
5 用户管理 4
用一个查询怎么实现如下结果:ID Name ParentName
2 录入数据 合同管理
-- Author : htl258(Tony)
-- Date : 2010-04-28 17:06:11
-- Version:Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
--------------------------------------------------------------------------
--> 生成测试数据表:tbIF NOT OBJECT_ID('[tb]') IS NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb]([ID] INT,[Name] NVARCHAR(10),[ParentID] INT)
INSERT [tb]
SELECT 1,N'合同管理',0 UNION ALL
SELECT 2,N'录入数据',1 UNION ALL
SELECT 3,N'分析统计',1 UNION ALL
SELECT 4,N'系统管理',0 UNION ALL
SELECT 5,N'用户管理',4
GO
--SELECT * FROM [tb]
select ID,Name,ParentName=(select Name from tb where id=t.[ParentID]) from tb t where ID=2
/*
ID Name ParentName
----------- ---------- ----------
2 录入数据 合同管理(1 行受影响)
*/?
select ID, Name, (select ParentName from table b where b.id=a.ParentName)as ParentName from table a
更新select ID, Name, (select Name from table b where b.id=a.ParentName)as ParentName from table a
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-28 17:22:41
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([ID] int,[Name] varchar(8),[ParentID] int)
insert [tb]
select 1,'合同管理',0 union all
select 2,'录入数据',1 union all
select 3,'分析统计',1 union all
select 4,'系统管理',0 union all
select 5,'用户管理',4
--------------开始查询--------------------------
select
b.id,b.name,a.name as ParentName
from
tb a,
tb b
where
a.id=b.ParentID
and
b.ID=2
----------------结果----------------------------
/*id name ParentName
----------- -------- ----------
2 录入数据 合同管理(1 行受影响)*/
ID Name ParentID TypeID
1 合同管理 0 1
2 录入数据 1 2
3 分析统计 1 1
4 系统管理 0 2
5 用户管理 4 1b表
ID Name
1 窗体
2 子窗体需要结果:
ID Name ParentName TypeName
2 录入数据 合同管理 子窗体
insert [a]
select 1,'合同管理',0,1 union all
select 2,'录入数据',1,2 union all
select 3,'分析统计',1,1 union all
select 4,'系统管理',0,2 union all
select 5,'用户管理',4,1
create table b(ID int,Name varchar(10))
insert into b values(1 ,'窗体')
insert into b values(2 ,'子窗体')
goselect t1.ID ,t1.Name,t2.Name ParentName , t3.Name TypeName
from a t1 , a t2 , b t3
where t1.id = 2 and t1.ParentID = t2.id and t1.TypeID = t3.iddrop table a , b/*
ID Name ParentName TypeName
----------- -------- ---------- ----------
2 录入数据 合同管理 子窗体(所影响的行数为 1 行)
*/