2010-11-02 35 views
0

所以我有三个表,table1table2table3。它们分别具有ID字段table1ID,table2IDtable3ID。此外,table2的字段table1ID指向table1中的一行,而table3的字段table2ID指向table2中的一行。SQL Management Studio选择特定的孩子

所以,我的问题是,我该怎么做,在table3table2引用一排table1与ID 4引用一行只可选择行的select语句?

+0

你的问题无关,与SQL Management Studio中。虽然,很显然你正在使用SQL Server并通过SQL Management Studio访问服务器。 – TechTravelThink 2010-11-02 12:44:57

+0

固定标签以匹配问题。 – invert 2010-11-02 12:53:13

回答

1

你正在寻找一个链接的加入与此类似

select * from table3 
join table2 on table3.table2ID = table2.table2ID 
join table1 on table2.table1ID = table1.table1ID 
where table1.ID = 4 

这只会返回表3的记录,如果有匹配的表2和表1的纪录。联接将结果筛选出其中加入匹配,并且WHERE过滤器将只从结果中选择其中table1的ID = 4

工作示例我刮起(嘿我有时间杀)

create table #table1 (table1ID int) 
create table #table2 (table2ID int, table1ID int) 
create table #table3 (table3ID int, table2ID int) 

insert into #table1 values(1) 
insert into #table1 values(2) 
insert into #table1 values(3) 
insert into #table1 values(4) 

insert into #table2 values(10, 1) 
insert into #table2 values(11, 2) 
insert into #table2 values(12, 3) 
insert into #table2 values(13, 4) 

insert into #table3 values(20, 10) 
insert into #table3 values(21, 11) 
insert into #table3 values(22, 12) 
insert into #table3 values(23, 13) 

-- all joined records 
select * from #table3 
join #table2 on #table3.table2ID = #table2.table2ID 
join #table1 on #table2.table1ID = #table1.table1ID 

-- only where table1 ID = 4 
select * from #table3 
join #table2 on #table3.table2ID = #table2.table2ID 
join #table1 on #table2.table1ID = #table1.table1ID 
where #table1.table1ID = 4 

drop table #table1 
drop table #table2 
drop table #table3 

这给你

table3ID table2ID table2ID table1ID table1ID 
----------- ----------- ----------- ----------- ----------- 
20   10   10   1   1 
21   11   11   2   2 
22   12   12   3   3 
23   13   13   4   4 

table3ID table2ID table2ID table1ID table1ID 
----------- ----------- ----------- ----------- ----------- 
23   13   13   4   4 
+2

不确定*是否会从表2和表3返回字段。怎么样选择table3。*? – TechTravelThink 2010-11-02 12:43:29

+0

@StartClass:是的,它确实返回所有表中的字段。而你说的话修复了它。谢谢! – Entity 2010-11-02 12:48:25

+0

没问题! :-) – invert 2010-11-02 12:54:40