了解多個 LEFT JOIN 的不準確存取計數
提供的查詢產生不正確的存取計數,因為多個 LEFT JOIN
運算的順序性質會導致乘法而不是加法結果。
最初,加入 grocery
表可以正確計算每個使用者的雜貨訪問量。但是,後續的 LEFT JOIN
和 fishmarket
會為每個用戶建立多行,從而有效地將每個用戶的雜貨訪問計數乘以魚市場訪問次數。 這解釋了訪問這兩家商店的用戶計數錯誤的“12”。
解決方案:透過子查詢精確聚合
使用子查詢獨立聚合每個商店的存取計數解決了這個問題:
SELECT u.id, u.account_balance, (SELECT COUNT(*) FROM grocery WHERE user_id = u.id) AS "# of grocery visits", (SELECT COUNT(*) FROM fishmarket WHERE user_id = u.id) AS "# of fishmarket visits" FROM users u ORDER BY u.id;
此修改後的查詢準確地統計並顯示每個使用者的雜貨店和魚市訪問量,提供正確的聚合資料。
以上是為什麼多個 LEFT JOIN 會產生不正確的存取計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!