左连接返回空结果集

时间:2013-10-16 21:42:57

标签: php mysql

SELECT branch_name, workerID, COUNT(*) 
FROM company_branch 
LEFT JOIN workers ON workers.branchID = company_branch.branchID 
WHERE companyID=? 
GROUP BY workers.branchID

我有公司,公司分支机构和工人的数据库。每家公司都有分支机构,每个分支机构都有工人。

  

公司>公司分支>工

现在我想要的是获得每个分支的所有分支和工人计数的列表。

我的查询有效,但不适用于0名工作人员为分支机构工作的情况。我想要所有公司分支机构的名单,甚至认为没有任何工人。

3 个答案:

答案 0 :(得分:1)

/保证的数据进行分组,而不是LEFT JOIN中的某些数据:

GROUP BY company_branch.branchID

答案 1 :(得分:1)

您正在workers.branchID进行分组。如果分支没有worker,那么该字段实际上将为null。您应该在company_branch.brandID上进行分组。由于它位于联接的左侧,因此无论有多少(或几个)工作人员实际连接到该分支,它都将始终可用。

答案 2 :(得分:1)

只是为了澄清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