select top 10 * from ViewBgbh where 综合判定='/' and (报告编号 in (select 报告编号 from ViewJyxm)) and (报告编号 not in (select 报告编号 from ViewJyxm where 结果='')) order by 报告编号
原句目的是从ViewBgbh中查询所有字段,条件是在ViewJyxm中存在,但必须 结果!='',以上语句可以达到目的,只是效率太低,求优化语句

解决方案 »

  1.   

    原查询,红字部分改为下面:SELECT TOP 10
            *
    FROM    ViewBgbh
    WHERE   综合判定 = '/'
            AND ( 报告编号 IN ( SELECT  报告编号
                            FROM    ViewJyxm ) )
            AND ( 报告编号 NOT IN ( SELECT  报告编号
                                FROM    ViewJyxm
                                WHERE   结果 = '' ) )
    ORDER BY 报告编号改后程序:SELECT TOP 10
            *
    FROM    ViewBgbh
    WHERE   综合判定 = '/'
            AND ( 报告编号 IN ( SELECT  报告编号
                            FROM    ViewJyxm WHERE   结果 <> '') )
    ORDER BY 报告编号
      

  2.   

    select top 10 * from ViewBgbh where 综合判定='/' and (报告编号 in (select 报告编号 from ViewJyxm where and  结果<>''))  order by 报告编号
     
      

  3.   


    select top 10 a.* from 
    ViewBgbh  a 
    inner join ViewJyxm b on a.报告编号=b.报告编号 and b.结果<>''
    where a.综合判定='/'  order by a.报告编号
      

  4.   

    它的那个ViewBgbh看上去像视图,如果是视图,关联的话可能用不到索引
      

  5.   

    以上几种均会忽略:同时存在 结果!='' 和结果='' 的情况我需要的是:ViewJyxm必须存在记录(即包含ViewBgbh中的报告编号),并且记录不能为空(可能有多条,且都不能为空)
      

  6.   


    select top 10 * from ViewBgbh a where 综合判定='/' and 
    exists (select * from ViewJyxm where 报告编号 = a.报告编号 and  结果 <> '')
    order by 报告编号--并在报告编号上创建聚集索引,表或视图都没有关系,若是视图,需要先将视图绑定到架构
      

  7.   


    SELECT TOP 10 A1.* 
    FROM ViewBgbh AS A1 
    JOIN ViewJyxm AS A2 ON (A1.报告编号=A2.报告编号) 
    WHERE A1.综合判定='/' AND A2.结果=''
    ORDER BY A1.报告编号
      

  8.   

    select top 10 * from ViewBgbh 
    where 综合判定='/' 
    and 报告编号 in (select 报告编号 from ViewJyxm where 结果!='')
    order by 报告编号