语句如下:
Declare @msi varchar(20)
Set @msi = '12345'
exec
(
'select  max(distance) from F_sites_distance 
where 
site1 in  
 (select siteno  from F_sites_info_xy 
 where 
 cellid1 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid2 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid3 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid4 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid5 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid6 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid7 in (select cellid from T_UM0301_full where msi = ' + @msi + ') or
 cellid8 in (select cellid from T_UM0301_full where msi = ' + @msi + ') 
 )因为表T_UM0301_full比较大,如果每次查询都需要查询T_UM0301_full表8次,比较费时间,有什么好的方法查询一遍后将结果保存后可以直接使用么?谢谢。在线等。

解决方案 »

  1.   

    Declare @msi varchar(20)
    Set @msi = '12345'
    exec
    (
    'select  max(distance) from F_sites_distance 
    where 
    site1 in  
     (select siteno,(cellid1+cellid2+cellid3+cellid4+cellid5+cellid6+cellid7+cellid8) as cellid   from F_sites_info_xy 
     where cellid like '%@msi %'
    )??
      

  2.   

    'select max(a.distance) from F_sites_distance a join F_sites_info_xy b on a.site1 = b.siteno join T_UM0301_full c on charindex(''/'' + c.cellid''/'', ''/'' + b.cellid1 + ''/'' + b.cellid2 + ''/'' + b.cellid3 + ''/'' + b.cellid4 + ''/'' + b.cellid5 + ''/'' + b.cellid6 + ''/'' + b.cellid7 + ''/'' + b.cellid8 + ''/'') > 0 where msi = ' + @msi
      

  3.   

    'select max(a.distance) from F_sites_distance a join F_sites_info_xy b on a.site1 = b.siteno join T_UM0301_full c on charindex(''/'' + c.cellid + ''/'', ''/'' + b.cellid1 + ''/'' + b.cellid2 + ''/'' + b.cellid3 + ''/'' + b.cellid4 + ''/'' + b.cellid5 + ''/'' + b.cellid6 + ''/'' + b.cellid7 + ''/'' + b.cellid8 + ''/'') > 0 where msi = ' + @msi
      

  4.   

    这样不行,我需要是精确的匹配,不能使用like
      

  5.   

    TO : allright_flash() 
         cellid1+cellid2+cellid3+cellid4+cellid5+cellid6+cellid7+cellid8
         会有错误  不行啊
    TO : dulei115() 
         如果 有这样的数据
          b.cellid1 是 '/'
          c.cellid  是 ''  
         会不会有问题?
      

  6.   

    这样对不对 ?select  max(distance) 
    from F_sites_distance 
    where site1 in  
     (select siteno  
    from F_sites_info_xy a ,
    (select cellid from T_UM0301_full where msi = '12345') b
    where  
    a.cellid1 = b.cellid or 
    a.cellid2 = b.cellid or 
    a.cellid3 = b.cellid or 
    a.cellid4 = b.cellid or 
    a.cellid5 = b.cellid or 
    a.cellid6 = b.cellid or 
    a.cellid7 = b.cellid or 
    a.cellid8 = b.cellid 
    (
      

  7.   

    to:crazy_boy1(小辉) 
    这个思路好像比较好,我试一试
      

  8.   

    --看看这个行不行
    '
    select max(distance) 
    from F_sites_distance
    join F_sites_info_xy on site1=siteno
    join T_UM0301_full on COALESCE(nullif(cellid1,'+@msi+'),cellid2,'+@msi+'),cellid3,'+@msi+'),
    cellid4,'+@msi+'),cellid5,'+@msi+'),cellid6,'+@msi+'),cellid7,'+@msi+'),cellid8,'+@msi+'),0) is null 
    '