左侧联接表上的mysql计数正在忽略未联接的记录

fafcakar  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(275)

我有3个表(这些是主字段):
朋友(存储用户的朋友)
id\u用户
id\u str(twitter唯一id)
用户(存储用户)
id\u用户
id\u str(twitter唯一id)
名称
wc\ U forecast(存储用户的足球预测)
id\U预测
id\u用户
我需要从userid3中选择一个所有朋友的列表,以及他们预测的数量。这是我当前的查询:

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

问题是并不是所有的用户都被显示出来。特别是那些没有做任何预测的人不在名单上。奇怪的是,其中只有一个是。
下面是一些示例记录的sql摆弄。
问题是,如何显示所有用户朋友的列表,包括所有在wc\u forecast中没有记录的朋友?

yx2lnoni

yx2lnoni1#

我想如果没有分组依据的值,它就被排除了。
请注意,您是按“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

http://sqlfiddle.com/#!9/3519c/12/0年

相关问题