Я пытаюсь получить данные из 2 таблиц с помощью одного оператора SQL, используя объединения. Идея довольно проста. У проекта есть участники, и в обзоре проекта я хочу показать информацию о проекте с количеством участников.LEFT OUTER JOIN не показывает все строки?
Сейчас есть 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
Проблемы, этот запрос возвращает только проект с участниками и один без участников опущен.
Что я здесь делаю неправильно?
Это сработало! Благодаря! Не могли бы вы объяснить мне почему? Теперь я знаю, что это работает, но у меня нет идеи, почему это работает. – SheperdOfFire
Вы должны использовать 'GROUP BY', так как вы применяете агрегированную функцию' COUNT() 'и хотите получать результаты для каждой группы (в вашем случае для каждого проекта), а не одно значение. – peterm
На самом деле меня сейчас интересует, как выглядит производительность этого взгляда по сравнению с коррелированным подзапросом? Было бы это похоже или могло бы быть потенциально более эффективным? – Kaiwa