【发布时间】:2021-12-23 00:57:04
【问题描述】:
所以我正在尝试加入单列计数的子查询:
(SELECT count(u.id) FROM companies_company cc FULL JOIN auth_user u on u.company_id = cc.id FULL JOIN auth_user_groups ug ON ug.user_id= u.id FULL JOIN auth_group g ON g.id = ug.group_id WHERE cc.deactivated is null and (email is null) GROUP BY cc.id ORDER BY cc.id)
到下面这个查询。
SELECT cc.id , cc.name,
(SELECT count(*) from auth_user u where cc.id = u.company_id and (u.email is null)) as number_of_real_users,
(SELECT count(u.id) FROM companies_company cc FULL JOIN auth_user u on u.company_id = cc.id FULL JOIN auth_user_groups ug ON ug.user_id= u.id FULL JOIN auth_group g ON g.id = ug.group_id WHERE cc.deactivated is null and (email is null) GROUP BY cc.id ORDER BY cc.id) as number_of_full_users,
ss.user_permissions_enabled, cc.company_type,
FROM companies_company cc
FULL JOIN subscriptions_subscription ss on ss.company_id = cc.id
WHERE cc.deactivated is null
GROUP BY cc.id, cc.name, ss.user_permissions_enabled
ORDER BY cc.id
但我收到错误“用作表达式的子查询返回了不止一行”... 这是出乎意料的
(SELECT count(*) from auth_user u where cc.id = u.company_id and (u.email is null)) as number_of_real_users,
是我包含的另一个子查询,但效果很好,那么为什么不能添加下面的这个子查询?
(SELECT count(u.id) FROM companies_company cc FULL JOIN auth_user u on u.company_id = cc.id FULL JOIN auth_user_groups ug ON ug.user_id= u.id FULL JOIN auth_group g ON g.id = ug.group_id WHERE cc.deactivated is null and (email is null) GROUP BY cc.id ORDER BY cc.id) as number_of_full_users,
【问题讨论】:
-
子查询与外部查询无关,因此它将在外部查询的每一行返回多行。您应该在子查询中给
companies_company一个不同的别名(否则,cc是什么,内表还是外表?),并添加类似WHERE cc2.id = cc.id的内容。为什么所有FULL JOINS? -
太棒了,谢谢伙计!
-
如果有人在评论中回答您,请让他们将其发布为答案或将其发布为答案。但我知道你在评论说评论不回答是有帮助的。可以单击评论的向上箭头表示同意。但是 cmets 不是永久性的。特别是“感谢”cmets。我提到点击/接受答案只是为了确保您知道。
标签: sql postgresql join