我目前有四个表,users
,user_groups
,user_group_memberships
和user_group_permissions
。 user_group_memberships
用于将users.id
链接到user_groups.user_id
,而user_group_permissions
用于将组成员链接到权限/权限列表。
我想运行一个查询,从user_groups获取所有组的数组,并在同一查询中从user_group_memberships获取每个组的成员数,然后我想从user_group_permissions获取用户策略的名称。
如果每个user_groups
在user_group_memberhips
中都有成员,并且每个user_groups
记录在user_group_permissions
中都设置了策略,则查询“有效”,但这不会返回任何内容。尚未分配成员或用户策略的组。如果我是NULL
或我的JOIN,我是否会误解呢?
SELECT ug.*,
(SELECT count(*) FROM user_group_memberships WHERE ug.id = ugm.group_id) AS member_count,
(SELECT policy_name FROM user_group_permissions WHERE ugp.id = ug.user_policy_id) AS policy_name
FROM
user_groups AS ug
LEFT JOIN
user_group_memberships AS ugm ON ug.id = ugm.group_id
LEFT JOIN
user_group_permissions AS ugp ON ug.user_policy_id = ugp.id
WHERE
ug.organisation_id=?
users
+----+-----------------+
| id | username |
+----+-----------------+
| 1 | Thomas |
| 2 | Harry |
+----+-----------------+
user_groups
+----+-----------------+-------------------+------------+
| id | organisation_id | user_permission_id| group_name |
+----+-----------------+-------------------+------------+
| 1 | 123 | 1 | Finance |
| 2 | 123 | 2 | Support |
+----+-----------------+-------------------+------------+
user_group_memberships
+----+-----------------+----------+----------+
| id | organisation_id | user_id | group_id |
+----+-----------------+----------+----------+
| 1 | 123 | 1 | 1 |
| 2 | 123 | 2 | 1 |
+----+-----------------+----------+----------+
user_group_permissions
+----+-----------------+
| id | policy_name |
+----+-----------------+
| 1 | Finance |
| 2 | Support |
+----+-----------------+
使用上面的示例,我希望查询返回两行(每个组一个),第1组(第1行)为member_count = 2
,第2组(第2行)为member_count = 0
。当前,由于member_count
存在/不为null,它仅为组1返回单个。它不返回第2组的数据,因为group_memberships
中没有第2组的记录以满足COUNT()。
user_groups.user_permissions_id
为NULL时也会发生相同的问题,如果该组具有成员并且该组设置了user_permission_id,它将仅返回一个组记录。
答案 0 :(得分:1)
您对Correlated subqueries的使用是错误的。另外,要获取成员数,您无需使用Subquery;您可以将<html>
<head>
</head>
<body>
<button type='button' onClick='example()'>Click me</button>
<script src='Scripts/examplefile.js></script>
</body>
</html>
与Group by
一起使用。
尝试:
Count()