表subject的结构:
id,name,content表review的结构:
id,name,subject_id,content其中subject与review是“1对多”的关系,现在想查询:
subject.id,subject.name,reviewcount
注:reviewcount为每条subject对应的review的记录数量。开始用这样的SQL查询(mysql):
select s.id,s.name,count(r.id) as reviewcount from subject s,review r where s.id=r.subject_id  group by s.id
但结果只查询得到reviewcount>0的记录,reviewcount=0的记录没有查询到:(
然后用下面的SQL查询就能够返回正确的结果:
select
 id,
name,
(select count(review.id) from review where subject.id=review.subject_id) as reviewcount
 from subject为什么会这样?第二个SQL句子好像效率不高,应该是n+1次查询了。有没有更好的办法?

解决方案 »

  1.   

    第二句:
    select
     id,
    name,
    (select count(review.id) from review where subject.id=review.subject_id) as reviewcount
     from subject
    前提是你在subject表里面查询数据,所有的 id,name都要查出来,同时,查询符合条件subject.id=review.subject_id的纪录,由于你要查询的是一个count(),所以如果不满足条件的,则为0。
    第一句:
    select s.id,s.name,count(r.id) as reviewcount from subject s,review r where s.id=r.subject_id  group by s.id
    必须要满足s.id=r.subject_id  的纪录才查询出来,所以比第二句要少了
    我市这样理解的,见笑了