我正在尝试使用联接使用一条SQL语句从2个表中获取数据。
这个想法很简单。一个项目有参与者,在项目概述中,我想显示项目信息以及参与者的数量。

现在有2个项目,一个项目有参与者,另一个项目没有参与者。

我使用以下查询:

SELECT SQL_CALC_FOUND_ROWS `p`.`id`,
       `p`.`title`,
       `p`.`live`,
       `p`.`startDate`,
       `p`.`endDate`,
       COUNT(`part`.`id`) AS `participants`
FROM `projects` `p`
LEFT OUTER JOIN `participants` `part`
    ON `p`.`id`  = `part`.`projectid`
ORDER BY `p`.`live` DESC,
         `p`.`startDate` DESC
LIMIT 0,10


问题是,此查询仅返回有参与者的项目,而没有参与者的项目被忽略。

我在这里做错了什么?

最佳答案

您必须使用GROUP BY

SELECT SQL_CALC_FOUND_ROWS `p`.`id`,
       `p`.`title`,
       `p`.`live`,
       `p`.`startDate`,
       `p`.`endDate`,
       COUNT(`part`.`id`) AS `participants`
FROM `projects` `p`
LEFT OUTER JOIN `participants` `part`
    ON `p`.`id`  = `part`.`projectid`
GROUP BY `p`.`id`,
         `p`.`title`,
         `p`.`live`,
         `p`.`startDate`,
         `p`.`endDate`
ORDER BY `p`.`live` DESC,
         `p`.`startDate` DESC
LIMIT 0,10


这是SQLFiddle演示

关于mysql - LEFT OUTER JOIN不显示所有行吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17693268/

10-13 08:39