问题描述
dto_i_xiangkanxk:相刊表dto_i_bbx_comment:评论表dto_i_xk_detail:相刊详细表我想查询评论次数最多的相刊selectcount(bbx.c_id)ascounts,xk.dix_idfromdto_i_xiangkanxkleftjoindto_i_bbx_commentbbxonxk.dix_id=bbx.s_idleftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_IDgroupbyxk.dix_idorderbycountsdesclimit18改sql语句得到的结果是正确的,counts是正确的---------------------------------------------------------------------------selectcount(bbx.c_id)ascounts,xk.dix_idfromdto_i_xiangkanxkleftjoindto_i_bbx_commentbbxonxk.dix_id=bbx.s_idgroupbyxk.dix_idorderbycountsdesclimit18该sql语句得到的结果是错误的,counts值要多得多请问是为什么呀
解决方案
解决方案二:
leftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID这句话是相刊表去关联相刊表明细表,如果相刊表明细表中根本没有记录去关联相刊表的话那么查询的记录自然多一些了。如下:只看关联字段相刊表dix_id12相刊表明细表DIX_ID1有关联1记录没关联2条记录
解决方案三:
leftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID左关联了肯定要比你原先的多LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
解决方案四:
引用2楼java_cxrs的回复:
leftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID左关联了肯定要比你原先的多LEFTJOIN关键字会从左表(table_name1)那里返回所有的行,即使在右表(table_name2)中没有匹配的行。
恩,会查出多的记录
解决方案五:
该回复于2010-12-06 08:43:02被版主删除
解决方案六:
你后面不是还leftjoin一次吗?结果要多最后那张表的记录*3次吧
解决方案七:
分两步来执行的话,你就很清楚了:先做Joint操作:selectbbx.c_id,xk.dix_idfromdto_i_xiangkanxkleftjoindto_i_bbx_commentbbxonxk.dix_id=bbx.s_idleftjoindto_i_xk_detailasdetonxk.DIX_ID=det.DIX_ID再做对上面的结果表做count操作