SELECT a.tlbid, a.tlbname, a.slbid, count(1) AS diseasecount FROM tleibie a LEFT OUTER JOIN  product b ON a.tlbid = b.tlbid WHERE (a.slbid = 115) GROUP BY a.tlbid, a.tlbname, a.slbid
结果:
330 口腔护理 115 1 (没有一个记录却结果是1而不是0)
331 手足护理 115 1 (没有一个记录却结果是1而不是0)
332 母婴护理 115 1 (没有一个记录却结果是1而不是0)
333 眼部护理 115 1 (没有一个记录却结果是1而不是0)
334 性病防护 115 1 (没有一个记录却结果是1而不是0)
335 祛斑祛痘 115 1 (确实有一个记录)
336 脱毛洗浴 115 1 (没有一个记录却结果是1而不是0)

我想得到结果是:
330 口腔护理 115 0 
331 手足护理 115 0 
332 母婴护理 115 0 
333 眼部护理 115 0 
334 性病防护 115 0 
335 祛斑祛痘 115 1 
336 脱毛洗浴 115 0 

解决方案 »

  1.   

    SELECT a.tlbid, a.tlbname, a.slbid, (select count(*) from product where a.tlbid=tlbid) AS diseasecount FROM tleibie a
    WHERE (a.slbid = 115) 
      

  2.   

    SELECT a.tlbid, a.tlbname, a.slbid, count(case when b.tlbid is null then 0 else 1 end) AS diseasecount 
    FROM tleibie a LEFT OUTER JOIN  product b 
    ON a.tlbid = b.tlbid 
    WHERE (a.slbid = 115) 
    GROUP BY a.tlbid, a.tlbname, a.slbid
      

  3.   

    SELECT   a.tlbid, a.tlbname, a.slbid, 
             count(b.tlbid) AS diseasecount 
    FROM     tleibie a LEFT OUTER JOIN  product b 
                ON a.tlbid = b.tlbid 
    WHERE    (a.slbid = 115) 
    GROUP BY a.tlbid, a.tlbname, a.slbid
      

  4.   


    --纠正一下2楼的写法.
    SELECT a.tlbid, a.tlbname, a.slbid, sum(case when b.tlbid is null then 0 else 1 end) AS diseasecount 
    FROM tleibie a LEFT OUTER JOIN  product b 
    ON a.tlbid = b.tlbid 
    WHERE (a.slbid = 115) 
    GROUP BY a.tlbid, a.tlbname, a.slbid
      

  5.   


    SELECT 
    a.tlbid, 
    a.tlbname, 
    a.slbid, 
    SUM(CASE WHEN b.tlbid IS NULL THEN 0 ELSE 1 END)
    FROM tleibie a 
    LEFT OUTER JOIN  product b 
    ON a.tlbid = b.tlbid 
    WHERE (a.slbid = 115) 
    GROUP BY a.tlbid, a.tlbname, a.slbid