SELECT branch_name, workerID, COUNT(*)
FROM company_branch
LEFT JOIN workers ON workers.branchID = company_branch.branchID
WHERE companyID=?
GROUP BY workers.branchID
我有一个公司,公司分支机构和工人的数据库。每个公司都有分支机构,每个分支机构都有工人。
树:公司>公司分公司>工人
现在我想要的是获取每个分支的所有分支和辅助角色计数的列表。
我的查询有效,但当 0 个工作人员为分支机构工作时无效。我想要所有公司分支机构的清单,即使认为没有任何工人。
按您拥有的数据分组/保证,而不是按LEFT JOIN
中的某些数据分组:
GROUP BY company_branch.branchID
您正在分组workers.branchID
.如果分支没有工作线程,则该字段实际上将为 null。您应该改为company_branch.brandID
分组。由于它位于联接的左侧,因此无论实际附加到该分支的辅助角色数量(或数量很少)如何,它都将始终可用。
只是为了澄清Mark B和Wrikken所写的内容:
当您在可能为空的字段上使用GROUP BY
时,发生的情况是,您没有列出零条记录,而是将所有company_branch
记录集中在一起,没有 (NULL
) 工作线程 - 这就是您的COUNT(*)
值将指示的内容。
下面是 sqlfiddle 中发生的事情的示例: http://sqlfiddle.com/#!2/4fa23/2/0
在那里,您有两个分支("分支 2.1"和"分支 2.2"),并且都没有工作人员。因此,您的COUNT(*)
是 2,但只显示第一条company_branch
记录,并且全部在单个记录中。
解决方案正如 Mark B 和 Wrikken 所说 - 更改您的GROUP BY
以使用 company_branch.branchID
.