我有3个表(这些是主要字段):
朋友(存储用户的朋友)
用户(存储用户)
wc_forecast (存储用户的足球预测)
我需要从用户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
问题是并非所有用户都在显示。特别是那些没有做出任何预测的人不在该列表中。奇怪的是,其中只有一个是。
这是一个带有一些示例记录的SQL Fiddle。
问题是,如何显示所有用户朋友的列表,包括wc_forecast中没有记录的所有朋友?
答案 0 :(得分:2)
我认为,如果没有分组值,则将其排除。
请注意,您要按“wc_forecast.id_user”进行分组,这可能存在也可能不存在。如果确实存在,则获得价值。如果它不存在,你什么也得不到。也许你想通过COALESCE分组(wc_forecast.id_user,user.id_user)?或者只是按user.id_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