项目中碰到一个Sql,由于使用了两个IN 查询起来非常慢,请大侠们指教,不剩感激!!SELECT COUNT(*) FROM TBCOMPANY c WHERE c.FDCOMPANYID IN (SELECT FDCOMID FROM TBCOMPANYCON WHERE FDCONID IN (SELECT CONID FROM TBCONSULTANT WHERE FDCONSENAME LIKE '%fr%'))

解决方案 »

  1.   

    select count(distinct c.唯一关键字段) from TBCOMPANY c,TBCOMPANYCON  d,TBCONSULTANT e where c.FDCOMPANYID=d.FDCOMID and d.FDCONID = e.CONID and e.FDCONSENAME LIKE '%fr%'如果每个表中没有重复记录的话,上面的distinct就不用也可以
      

  2.   

    select count(distinct c.唯一关键字段) from TBCOMPANY c,TBCOMPANYCON  d,TBCONSULTANT e where c.FDCOMPANYID=d.FDCOMID and d.FDCONID = e.CONID and e.FDCONSENAME LIKE '%fr%' 
    应该可以,通过自连接将表连接(通过公用字段),代替了IN
      

  3.   

    select count(distinct c.唯一关键字段) 
    from TBCOMPANY c,TBCOMPANYCON  d,TBCONSULTANT e 
    where c.FDCOMPANYID=d.FDCOMID and d.FDCONID = e.CONID and
    e.FDCONSENAME LIKE '%fr%' 
    或者:
    select count(distinct c.唯一关键字段) 
    from TBCOMPANYCON e inner join TBCONSULTANT d on d.FDCONID = e.CONID  --内连接
    inner join c on c.FDCOMPANYID=d.FDCOMID
    where e.FDCONSENAME LIKE '%fr%' 
      

  4.   

    inner join TBCOMPANY  c on c.FDCOMPANYID=d.FDCOMID //忘加TBCOMPANY