有两个表,分别叫做"工程表"、"控制点表",一个工程下可以有好多个控制点。工程表
工程ID、工程名控制点表
控制点ID、控制点名称、控制点所在工程的ID如果用户输入工程名称,想同时查询工程以及控制点,原来是这样select * into #t from 工程表where 工程名 like '%{0}%'
select * from #t
select * from 控制点表 where 工程ID in
(select 工程ID from #t)这样同时查出所有跟用户输入工程名有关的工程,以及所有跟这些工程有关的控制点,但看不出所属关系。哪个控制点在哪个工程下。
本来我想用循环,类似这种declare @i int
set @i=1
while @i<30
begin
--{{{{{{{{{{{{{{{{{{{{
select * from 控制点表 where 工程ID = @i
--}}}}}}}}}}}}}}}}}}}}
set @i=@i+1
end 但现在工程ID不是连续的,而是在一个临时表#t中,这要怎么写SQL语句啊

解决方案 »

  1.   

    工程表
    工程ID、工程名
    1001    港口工程
    1002    新工程
    ……控制点
    控制点ID、控制点名称、控制点所在工程的ID
    1          控制点1      1001
    2          控制点2      1002
    3          控制点3      1001
    4          控制点4      1001
    5          控制点5      1002
      

  2.   


    select * from 控制点表 a,工程表 b  where a.工程ID  = b.工程ID 
    and b.工程名 like '%{0}%'
      

  3.   


    select *
    from 控制点表 t1 left join 工程表 t2
         on t1.控制点所在工程的ID = t2.工程ID and t2.工程名 like '%{0}%'
      

  4.   

    我想要这种效果declare @i int
    set @i=1
    while @i<30
    begin
    --{{{{{{{{{{{{{{{{{{{{
    select * from 控制点表 where 工程ID = @i
    --}}}}}}}}}}}}}}}}}}}}
    set @i=@i+1
    end 但这种查的时候是固定的工程ID,从1到30.
    没有办法查一个数据集里的工程ID。比如先
    select 工程ID into #t from 工程表 where 工程名 like '%{0}%'
    set @i=#t.rows[1].projectid;
    while #t.rows !=null
    begin
    --{{{{{{{{{{{{{{{{{{{{
    select * from 控制点表 where 工程ID = @i
    --}}}}}}}}}}}}}}}}}}}}
    set @i=#t.rows.next
    end
      

  5.   

    是不是可以用个group by,按照工程ID排列查询结果
      

  6.   

    你为什么要 while 呢,那不是出现很多结果窗口,排一下序也可以满足需要啊select * from 工程表 b,控制点表 a where a.工程ID = b.工程ID 
    and b.工程名 like '%{0}%' order by b.工程ID , a.控制点ID
      

  7.   

    不是group by,而是    order by