我想创建一个项目列表查询,该查询将提供已注册应用程序的数量,不包括用户不存在的应用程序。 在这种情况下,考虑到用户10不存在,我的查询结果应该如下:
结果
+----+------------+--------------+
| id | project | applications |
+----+------------+--------------+
| 1 | MyProject1 | 3 |
| 2 | MyProject2 | 0 |
| 3 | MyProject3 | 0 |
+----+------------+--------------+
表格
Projects
+----+------------+
| id | name |
+----+------------+
| 1 | MyProject1 |
| 2 | MyProject2 |
| 3 | MyProject3 |
+----+------------+
applications
+----+------+------------+
| id | user | project_id |
+----+------+------------+
| 1 | 3 | 1 |
| 2 | 4 | 1 |
| 3 | 5 | 1 |
| 4 | 10 | 1 |
+----+------+------------+
users
+----+---------+
| id | Name |
+----+---------+
| 1 | Smith |
| 2 | John |
| 3 | Paul |
| 4 | Chris |
| 5 | Gabriel |
+----+---------+
以下查询不排除不存在的用户:
SELECT `projects` . * , (
SELECT COUNT( * )
FROM `applications`
WHERE `applications`.`project_id` = `projects`.`id`
AND EXISTS (
SELECT `applications`.`id`
FROM `applications` , `users`,`project`
WHERE `application`.`user` = `users`.`id` AND `applications`.`project_id` = `project`.`id`
)
) AS `applications`
FROM `projects` ORDER BY `id` DESC LIMIT 30
最佳答案
我认为你想要左连接
和分组依据
:
select p.id, p.name, count(u.id)
from projects p left join
applications a
on p.id = a.project_id left join
users u
on a.user_id = u.id
group by p.id, p.name;
但是,您可能需要考虑修复数据。似乎应用程序和项目以及应用程序和用户之间应该存在外键关系。能够拥有无效用户意味着与用户不存在有效的外键关系。
关于mysql - 计算另一个表中用户的一个表的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33692343/