左侧联接表上的MySQL计数忽略未联接记录

左侧联接表上的MySQL计数忽略未联接记录,mysql,group-by,left-join,Mysql,Group By,Left Join,我有3个表(这些是主要字段): 好友(存储用户的好友) id\u用户 id_str(twitter唯一id) 用户(存储用户) id\u用户 id_str(twitter唯一id) 名字 wc_预测(用户预测) id_预测 id\u用户 我需要从用户ID 3中选择所有好友的列表,以及他们的预测计数。这是我当前的查询: SELECT COUNT(wc_forecast.id_forecast) AS q, user.name AS name, user.screen_name AS

我有3个表(这些是主要字段):

  • 好友(存储用户的好友)

    • id\u用户
    • id_str(twitter唯一id)
  • 用户(存储用户)

    • id\u用户
    • id_str(twitter唯一id)
    • 名字
  • wc_预测(用户预测)

    • id_预测
    • id\u用户
我需要从用户ID 3中选择所有好友的列表,以及他们的预测计数。这是我当前的查询:

SELECT
COUNT(wc_forecast.id_forecast) AS q,
user.name AS name, user.screen_name AS screen_name
FROM user
    JOIN friend ON friend.id_str = user.id_str
    LEFT JOIN wc_forecast ON wc_forecast.id_user = user.id_user
WHERE
    friend.id_user = 3
GROUP BY wc_forecast.id_user
ORDER BY q DESC
问题是并不是所有的用户都被显示出来。特别是那些没有做出任何预测的公司不在该名单中。奇怪的是,其中只有一个是

下面是一个示例,其中包含一些示例记录


问题是,如何显示所有用户朋友的列表,包括所有在wc_forecast中没有记录的朋友?

我想如果没有分组依据的值,则将其排除在外

请注意,您是按“wc\u forecast.id\u user”分组的,该用户可能存在,也可能不存在。如果它确实存在,您将获得值。如果它不存在,你将一无所获。也许您想通过合并进行分组(wc\u forecast.id\u user,user.id\u user)?或者简单地按user.id\u user分组,因为如果朋友的预测存在,它们应该是相同的值

SELECT
  COUNT(wc_forecast.id_forecast) AS q,
  user.name AS name,
  user.screen_name AS screen_name
FROM user
  JOIN friend ON friend.id_str = user.id_str
  LEFT JOIN wc_forecast
    ON wc_forecast.id_user = user.id_user
WHERE
    friend.id_user = 3
GROUP BY
  user.id_user
ORDER BY
  q DESC

我想,如果没有分组依据的值,则将其排除在外

请注意,您是按“wc\u forecast.id\u user”分组的,该用户可能存在,也可能不存在。如果它确实存在,您将获得值。如果它不存在,你将一无所获。也许您想通过合并进行分组(wc\u forecast.id\u user,user.id\u user)?或者简单地按user.id\u user分组,因为如果朋友的预测存在,它们应该是相同的值

SELECT
  COUNT(wc_forecast.id_forecast) AS q,
  user.name AS name,
  user.screen_name AS screen_name
FROM user
  JOIN friend ON friend.id_str = user.id_str
  LEFT JOIN wc_forecast
    ON wc_forecast.id_user = user.id_user
WHERE
    friend.id_user = 3
GROUP BY
  user.id_user
ORDER BY
  q DESC

谢谢!很好,谢谢!很好。