簡體   English   中英

LEFT JOINed表上的MySQL COUNT忽略了沒有連接的記錄

[英]MySQL COUNT on LEFT JOINed table is ignoring none joined records

我有3個表(這些是主要字段):

  • 朋友(存儲用戶的朋友)

    • id_user
    • id_str (Twitter唯一ID)
  • 用戶(存儲用戶)

    • id_user
    • id_str (Twitter唯一ID)
    • 名稱
  • wc_forecast (存儲用戶的足球預測)

    • id_forecast
    • id_user

我需要從用戶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中也沒有記錄的所有朋友?

我想,如果沒有價值可分組,則將其排除在外。

請注意,您正在按可能存在或可能不存在的“ 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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM