select * from 
(
select 表A.*
from 表A
where 表A.FLAG = 1 
)
TEST
where ID in
(       
select BH from 表B 
         left outer join
         表C on 表BL.SPR = 表C.USERID
         where 表C.SSGS = '001' and 表C.BM = '001'
         AND (表B.BZ IS NULL or 表B.PBZ=''))
这个sql 语句   没有 TEST这个表   为什么要加上这个才能实现我想要查询的结果!谢谢! 给我解释一下这个的用法。

解决方案 »

  1.   

    select * from  
    (
    select 表A.*
    from 表A
    where 表A.FLAG = 1  
    )
    TESTTEST 是一个临时表
      

  2.   

    TEST  是在为你的 查询:
         select 表A.*
        from 表A
        where 表A.FLAG = 1
    的结果集临时起个表名:TEST
    最外层的 select * from () test  就是把()内的结果集做为表来查询的。详细请看MSDN 的子查询相关内容
      

  3.   

    test 是个别名.对于用子查询结果作为查询数据源时,这个数据源要有个别名,这儿就是.
      

  4.   

    select * from  
    (
    select 表A.*
    from 表A
    where 表A.FLAG = 1  
    )TEST ---应该在这里吧 这个是别名 SQL语法需要
    where ID in
    (   
    select BH from 表B  
      left outer join
      表C on 表BL.SPR = 表C.USERID
      where 表C.SSGS = '001' and 表C.BM = '001'
      AND (表B.BZ IS NULL or 表B.PBZ=''))
      

  5.   

    TEST  只是一个别名而已
      

  6.   

    SQL codeselect * from  
    (
    select 表A.*
    from 表A
    where 表A.FLAG = 1  
    )TEST  where ID in
    (   
    select BH from 表B  
      left outer join
      表C on 表BL.SPR = 表C.USERID
      where 表C.SSGS = '001' and 表C.BM = '001'
      AND (表B.BZ IS NULL or 表B.PBZ='')) 
    这里的TEST就相当于下面语句中的a  这里a是table的别名
    select * from table a where a.id = ?