mysql - 如果我的计数行为 0,查询不会返回结果

标签 mysql sql

我有一个用户数据库。我想返回信息,包括他们所在组的数量。我执行以下 SQL 查询

SELECT dbo.Users.UserId AS 'userId', 
       dbo.Users.UserName AS 'firstName', 
       dbo.Users.Surname AS 'surname', 
       dbo.Users.Photograph AS 'photograph', 
       dbo.Users.JobTitle AS 'jobTitle', 
       dbo.Users.EmailAddress AS 'emailAddress', 
       dbo.Users.Inactive AS 'inactive', 
       COUNT(dbo.UserGroups.userId) AS 'teams'
 FROM dbo.Users, 
       dbo.UserGroups
 WHERE dbo.Users.UserId = 27 
       AND dbo.UserGroups.UserId = dbo.Users.UserId
 GROUP BY dbo.Users.UserId, 
       dbo.Users.UserName, 
       dbo.Users.Surname, 
       dbo.Users.Photograph, 
       dbo.Users.JobTitle, 
       dbo.Users.EmailAddress, 
       dbo.Users.Inactive

这不会返回任何结果,因为用户 id 27 不在任何组中,而它应该显示其他信息,并且组/团队行应为 0。

这对于一个或多个组中的用户来说效果很好

最佳答案

也许因为您使用的是隐式 INNER JOIN...请使用显式 LEFT JOIN。

试试这个:

SELECT dbo.Users.UserId AS 'userId', 
       dbo.Users.UserName AS 'firstName', 
       dbo.Users.Surname AS 'surname', 
       dbo.Users.Photograph AS 'photograph', 
       dbo.Users.JobTitle AS 'jobTitle', 
       dbo.Users.EmailAddress AS 'emailAddress', 
       dbo.Users.Inactive AS 'inactive', 
       COALESCE(COUNT(dbo.UserGroups.userId), 0) AS 'teams'
 FROM dbo.Users left join
       dbo.UserGroups on dbo.UserGroups.UserId = dbo.Users.UserId
 WHERE dbo.Users.UserId = 27  
 GROUP BY dbo.Users.UserId, 
       dbo.Users.UserName, 
       dbo.Users.Surname, 
       dbo.Users.Photograph, 
       dbo.Users.JobTitle, 
       dbo.Users.EmailAddress, 
       dbo.Users.Inactive

关于mysql - 如果我的计数行为 0,查询不会返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52059064/

相关文章:

sql - 为什么分区需要嵌套选择?

sql - 表名搜索

mysql - Symfony 中带有 ORDER BY 匹配条件的自定义 SQL 查询

MySQL 在链接字段匹配时选择行

MySQL 使用 LIMIT 无论记录的 id 是什么

php - Doctrine Query Builder 选择 Count with Case

mysql - 如何计算两列中具有相同值的行并仅返回 count<N(SQL) 的行?

mysql - 如何将十六进制格式的值从 csv 文件导入到我的 postgresql 表中?

java - 如何使用 JSP 连接到 Mysql 数据库?我的代码哪里错了?

mysql - 读到行尾