偵錯 SQL LEFT JOIN:準確的存取計數
在 SQL 中使用多個 LEFT JOIN
來統計不同表格的造訪次數時會出現一個常見問題。 此範例使用三個表格:users
、grocery
和 fishmarket
。 旨在統計每個使用者對雜貨店和魚市場的訪問次數的查詢會產生不準確的結果。
問題源自於連結的順序性質。 一個簡單的方法首先連接 users
和 grocery
,為每個具有非空 account_balance
的使用者及其雜貨店存取權建立一行。 隨後使用 fishmarket
進行連接,然後錯誤地將每個使用者的雜貨店訪問計數乘以魚市訪問計數。 這導致訪問總量膨脹。
解決方案涉及在將存取計數連接到users
表之前重組查詢以聚合存取計數。 這是使用兩個相關子查詢有效完成的。每個子查詢獨立地計算 grocery
或 fishmarket
表的訪問次數,並按 user_id
分組。 然後將這些聚合計數連接到 users
表,確保準確的訪問總數。
這是使用子查詢的更正查詢:
<code class="language-sql">SELECT u.id, u.account_balance, g.grocery_visits, f.fishmarket_visits FROM users u LEFT JOIN ( SELECT user_id, COUNT(*) AS grocery_visits FROM grocery GROUP BY user_id ) g ON g.user_id = u.id LEFT JOIN ( SELECT user_id, COUNT(*) AS fishmarket_visits FROM fishmarket GROUP BY user_id ) f ON f.user_id = u.id ORDER BY u.id;</code>
此修改後的查詢為每個使用者提供準確、獨立的雜貨店和魚市存取計數,解決了原始查詢的乘法錯誤。
以上是為什麼我的兩個 SQL LEFT JOINS 會傳回不正確的存取計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!