计数不适用于LEFT加入

时间:2015-02-23 06:26:34

标签: mysql sql left-join

我有两张表格如下:

首先是Product enter image description here

第二个是Documents enter image description here

我只想要Product表的每个记录的文档计数,但它只给出一行。我使用了以下查询:

SELECT `p`.`Id`,
       `p`.`Name`,
       `u`.`FirstName`,
       `u`.`LastName`,
       Count(doc.Id) AS NumOfDocuments
FROM (`Product` AS p)
LEFT JOIN `Documents` AS doc ON `p`.`Id` = `doc`.`ProductId`
INNER JOIN `ProductXUsers` AS pu ON `pu`.`ProductId` = `p`.`Id`
INNER JOIN `Users` AS u ON `u`.`Id` = `pu`.`UserId`
AND u.UserType='Customer'
WHERE `p`.`CreatedBy` = '3'
GROUP BY p.Id

2 个答案:

答案 0 :(得分:0)

在您的查询中添加GROUP BY,您只需删除包含 Product AS p 的括号:

SELECT `p`.`Id`,
       `p`.`Name`,
       `u`.`FirstName`,
       `u`.`LastName`,
       Count(doc.Id) AS NumOfDocuments
FROM `Product` AS p
LEFT JOIN `Documents` AS doc ON `p`.`Id` = `doc`.`ProductId`
INNER JOIN `ProductXUsers` AS pu ON `pu`.`ProductId` = `p`.`Id`
INNER JOIN `Users` AS u ON `u`.`Id` = `pu`.`UserId`
AND u.UserType='Customer'
WHERE `p`.`CreatedBy` = '3'
GROUP BY p.Id,`p`.`Name`,`u`.`FirstName`,`u`.`LastName`

答案 1 :(得分:0)

您忘记添加GROUP BY子句。

此外,您可以使用IFNULL替换null值。

SELECT `p`.`Id`,
       `p`.`Name`,
       `u`.`FirstName`,
       `u`.`LastName`,
       IFNULL(Count(doc.Id),0) AS NumOfDocuments
FROM `Product` AS p
INNER JOIN `ProductXUsers` AS pu ON `pu`.`ProductId` = `p`.`Id`
INNER JOIN `Users` AS u ON `u`.`Id` = `pu`.`UserId` AND u.UserType='Customer'
LEFT JOIN `Documents` AS doc ON `p`.`Id` = `doc`.`ProductId`
WHERE `p`.`CreatedBy` = '3'
GROUP BY p.Id