表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次查询了。有没有更好的办法?
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次查询了。有没有更好的办法?
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 的纪录才查询出来,所以比第二句要少了
我市这样理解的,见笑了