web2py左外连接未返回左表全部记录:为何无法获取计数为0的组?
为啥你的web2py代码查不到成员数为0的组?
核心问题出在表关联方向和统计逻辑上:
关联顺序搞反了
你现在是从auth_membership(成员关系表)左连auth_group(组表),但成员数为0的组在auth_membership里根本没有对应记录,左连后这些组的auth_membership字段全是NULL,后续分组时直接被排除了。得反过来,从auth_group左连auth_membership,这样所有组都会被保留,哪怕没有成员。COUNT()默认忽略空值
你用db.auth_membership.id.count()时,NULL值会被自动跳过,没有成员的组这个计数会是NULL,而不是0。要得到0的话,得用count(coalesce=True)(web2py的count方法支持这个参数),或者用count(*)配合左连后的空值处理。
修正后的示例代码:
count = db.auth_membership.id.count(coalesce=True) groups = db().select(db.auth_group.id, db.auth_group.role, count, left=db.auth_membership.on(db.auth_group.id == db.auth_membership.group_id), groupby=db.auth_group.id)
这样就能把所有组(包括成员数为0的)都查出来,对应计数会显示0。
内容的提问来源于stack exchange,提问作者JeffP
相关产品推荐
相关产品推荐

