刚有网友提问,只有一张表,其中有子键与父键关联,怎样根扰子键查询到父键记录的数据?
insus.net尝试写了一个简单的例子,希望能看得懂。
create table [dbo].[temptable] ( [id] int , [parent_id] int null, [itemname] nvarchar(40) ) go insert into [dbo].[temptable] ( [id], [parent_id], [itemname] ) values (1,null,'a'), (2,null,'b'), (3,1,'c'), (4,null,'d'), (5,3,'e') go select [id],[parent_id],[itemname] from [dbo].[temptable] go
下面是表关联:
select ta.[id] as [子表id], tb.[id] as [父表id], ta.[itemname] as [子表name], tb.[itemname] as [父表name] from [dbo].[temptable] as ta inner join [dbo].[temptable] as tb on (ta.[parent_id] = tb.[id]) go
后来网友提供数据,数据如下:
create table [dbo].[temptable] ( [id] int , [parent_id] int null, [itemname] nvarchar(40) ) go insert into [dbo].[temptable] ( [id], [parent_id], [itemname] ) values (1,0,'广东省'), (2,1,'广州市'), (3,2,'增城区'), (5,3,'小池镇'), (8,5,'xx村'), (9,5,'yy村'), (10,5,'zz村') go select [id],[parent_id],[itemname] from [dbo].[temptable] go
insus.net写的关联语句及查询语句:
select ta.[id] as [a-id], ta.[itemname] as [a-name], tb.[id] as [b-id], tb.[itemname] as [b-name], tc.[id] as [c-id], tc.[itemname] as [c-name] , td.[id] as [d-id], td.[itemname] as [d-name] , te.[id] as [e-id], te.[itemname] as [e-name] from [dbo].[temptable] as te inner join [dbo].[temptable] as td on (te.[parent_id] = td.[id]) inner join [dbo].[temptable] as tc on (td.[parent_id] = tc.[id]) inner join [dbo].[temptable] as tb on (tc.[parent_id] = tb.[id]) inner join [dbo].[temptable] as ta on (tb.[parent_id] = ta.[id]) go