好的,首先,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;