Хорошо, во-первых, count
- это зарезервированное слово в SQL, поэтому вы не можете использовать его в качестве псевдонима таблицы (если вы не указали его в кавычках, но не сделали этого). Во-вторых, реальным способом решения этой проблемы является введение в подзапрос предложения GROUP BY
.
Попробуйте это:
SELECT user3.*, subquery.theCount FROM
users AS user3
INNER JOIN (
SELECT
user1.id, count(user2.id) AS theCount
FROM
users AS user1
LEFT OUTER JOIN
users AS user2 ON user2.invited_by_id=user1.id
GROUP BY user1.id
) AS subquery ON subquery.id=user3.id;
Вот маленький грязный секрет о MySQL: он позволяет вам обманывать с помощью оператора GROUP BY
и выбирать столбцы, которых нет в списке GROUP BY
, а также нет в агрегатных функциях. Другие RMDMS не позволяют вам сделать это.
SELECT
user1.*, count(user2.id) AS theCount
FROM
users AS user1
LEFT OUTER JOIN
users AS user2 ON user2.invited_by_id=user1.id
GROUP BY user1.id;