seelct a.*
from list a,Pinst b,[Proc] c
where a.[user]='acxt'
and a.PINTID=b.ID
and b.RocID=c.ID
and c.PSetID=363

解决方案 »

  1.   

    --语句上的优化ms不多, 先改成EXISTS的方式看下,不行就要从索引方面着手了。SELECT * 
    FROM   list 
    WHERE  EXISTS
           (
           SELECT * 
           FROM PInst b
           WHERE a.PINTID=ID
                 AND EXISTS
                    (
                    SELECT * 
                    FROM Proc
                    WHERE ID=b.rocID
                           AND PSetID = 363
                   )
         ) 
         AND [USER]='acxt'
      

  2.   


    SELECT a.* 
    FROM list a LEFT JOIN 
               (SELECT ID FROM PInst c WHERE EXISTS
                      (SELECT ID FROM [Proc] WHERE PSetID=363 AND rocID=c.rocID))b
    ON a.PINTID=b.ID AND a.[USER]='acxt'    
      

  3.   

    --try
    SELECT distinct L.* 
    FROM list L left join PInst I on L.PINTID = I.ID
    left join [Proc] P on I.rocID = P.ID
    where L.[USER]='acxt' AND  I.ID is not null and P.ID is not null and P.PSetID=363
      

  4.   


    select a.* from list a
    join PInst b on b.ID=a.PINID
    join [Proc] c on c.ID=b.rocID
    where a.[USER]='acxt' and c.PSetID=363
      

  5.   

    我犯了和海爷一样的错误。。貌似楼主的效率还行
    不过一般能联表的尽量联表,不要用in,exists...
    select distinct a.* from list a
    join PInst b on b.ID=a.PINID
    join [Proc] c on c.ID=b.rocID
    where a.[USER]='acxt' and c.PSetID=363