首頁 >資料庫 >mysql教程 >為什麼我的兩個 SQL LEFT JOINS 會傳回不正確的存取計數?

為什麼我的兩個 SQL LEFT JOINS 會傳回不正確的存取計數?

Barbara Streisand
Barbara Streisand原創
2025-01-23 12:27:10263瀏覽

Why Are My Two SQL LEFT JOINS Returning Incorrect Visit Counts?

偵錯 SQL LEFT JOIN:準確的存取計數

在 SQL 中使用多個 LEFT JOIN 來統計不同表格的造訪次數時會出現一個常見問題。 此範例使用三個表格:usersgroceryfishmarket。 旨在統計每個使用者對雜貨店和魚市場的訪問次數的查詢會產生不準確的結果。

問題源自於連結的順序性質。 一個簡單的方法首先連接 usersgrocery,為每個具有非空 account_balance 的使用者及其雜貨店存取權建立一行。 隨後使用 fishmarket 進行連接,然後錯誤地將每個使用者的雜貨店訪問計數乘以魚市訪問計數。 這導致訪問總量膨脹。

解決方案涉及在將存取計數連接到users表之前重組查詢以聚合存取計數。 這是使用兩個相關子查詢有效完成的。每個子查詢獨立地計算 groceryfishmarket 表的訪問次數,並按 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn