实例:通过省市联动找到对应地方的酒店
中国
/ \
广东 广西
/ \
江门 中山
/ \
蓬江
/
xxx酒店
1 CREATE TABLE [dbo].[Adress]( 2 [placeId] [int] IDENTITY(1,1) NOT NULL, 3 [adress] [varchar](50) NOT NULL, 4 [flag] [int] NULL, 5 CONSTRAINT [PK_Adress] PRIMARY KEY CLUSTERED 6 ( 7 [placeId] ASC 8 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 9 ) ON [PRIMARY] 10 GO 11 SET ANSI_PADDING OFF 12 GO 13 SET IDENTITY_INSERT [dbo].[Adress] ON 14 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (2, N'中国', NULL) 15 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (3, N'日本', NULL) 16 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (4, N'美国', NULL) 17 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (5, N'英国', NULL) 18 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (6, N'广东', 2) 19 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (7, N'广西', 2) 20 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (8, N'湖北', 2) 21 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (9, N'广州', 6) 22 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (10, N'江门', 6) 23 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (11, N'中山', 6) 24 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (12, N'黄冈', 8) 25 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (13, N'东区', 11) 26 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (14, N'西区', 11) 27 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (15, N'博爱7路', 13) 28 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (16, N'中职', 15) 29 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (17, N'医药', 15) 30 INSERT [dbo].[Adress] ([placeId], [adress], [flag]) VALUES (18, N'天河', 9) 31 SET IDENTITY_INSERT [dbo].[Adress] OFF 32 /****** Object: Table [dbo].[Hotel] Script Date: 06/28/2015 19:08:08 ******/ 33 SET ANSI_NULLS ON 34 GO 35 SET QUOTED_IDENTIFIER ON 36 GO 37 SET ANSI_PADDING ON 38 GO 39 CREATE TABLE [dbo].[Hotel]( 40 [hotelId] [int] IDENTITY(1,1) NOT NULL, 41 [adressId] [int] NOT NULL, 42 [hotelName] [varchar](50) NOT NULL, 43 CONSTRAINT [PK_Hotel] PRIMARY KEY CLUSTERED 44 ( 45 [hotelId] ASC 46 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 47 ) ON [PRIMARY] 48 GO 49 SET ANSI_PADDING OFF 50 GO 51 SET IDENTITY_INSERT [dbo].[Hotel] ON 52 INSERT [dbo].[Hotel] ([hotelId], [adressId], [hotelName]) VALUES (1, 16, N'实训酒店') 53 INSERT [dbo].[Hotel] ([hotelId], [adressId], [hotelName]) VALUES (2, 17, N'酒店') 54 INSERT [dbo].[Hotel] ([hotelId], [adressId], [hotelName]) VALUES (3, 16, N'实训酒店2') 55 INSERT [dbo].[Hotel] ([hotelId], [adressId], [hotelName]) VALUES (4, 16, N'实训酒店3') 56 INSERT [dbo].[Hotel] ([hotelId], [adressId], [hotelName]) VALUES (5, 15, N'xxhitel') 57 SET IDENTITY_INSERT [dbo].[Hotel] OFF
1 Create Function [dbo].[GetParentAdress](@ID int) 2 Returns @Tree Table (ID Int, Name Varchar(50),fatherID Int) 3 As 4 Begin 5 Insert @Tree Select placeId,adress,flag From Adress Where placeId = @ID 6 While @@Rowcount > 0 7 Insert @Tree Select Adress.placeId,Adress.adress,Adress.flag From Adress Adress Inner Join @Tree B On Adress.placeId = B.fatherID And Adress.placeId Not In (Select ID From @Tree) 8 Return 9 End 10 GO
遍历父节点的函数
1 Create Function [dbo].[GetChildrenAdress](@ID int) 2 Returns @Tree Table (ID Int,Name Varchar(50), fatherID Int) 3 As 4 Begin 5 Insert @Tree Select placeId,adress,flag From Adress Where flag = @ID 6 While @@Rowcount > 0 7 Insert @Tree Select Adress.placeId,Adress.adress,Adress.flag From Adress Adress Inner Join @Tree B On Adress.flag = B.ID And Adress.placeId Not In (Select ID From @Tree) 8 Return 9 End 10 GO
遍历子节点函数
把找到的数据存储在B 树表里面
可以select 出B
select * from Hotel where adressId in(select ID from GetChildrenAdress(11))
找到中山以下的酒店名字
浙公网安备 33010602011771号