[英]LEFT OUTER JOIN not showing all rows?
我正在嘗試使用聯接使用一條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演示
我不認為應該使用JOIN來完成,而是使用相關的子查詢來完成。
SELECT SQL_CALC_FOUND_ROWS `p`.`id`,
`p`.`title`,
`p`.`live`,
`p`.`startDate`,
`p`.`endDate`,
(SELECT COUNT(`part`.`id`) FROM `participants` `part` WHERE `part`.`projectid` = `p`.`id`) AS `participants`
FROM `projects` `p`
ORDER BY `p`.`live` DESC,
`p`.`startDate` DESC
LIMIT 0,10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.