左外連接和左表中的不完整數據
了解連接條件如何影響左外連接的結果至關重要。 條件放置不正確可能會導致左表中的資料不完整。
讓我們檢查一下這個查詢:
<code class="language-sql">SELECT day.days, COUNT(*) AS opens FROM day LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) WHERE tracking.open_id = 10 GROUP BY day.days;</code>
此查詢旨在計算每日頁面開啟次數。 但是,即使 day
表有更多天,它可能只顯示幾天。 問題出在WHERE
子句上。
連接條件ON day.days = DAY(FROM_UNIXTIME(open_date))
正確符合天數。 但是,WHERE tracking.open_id = 10
在 連接之後過濾 ,刪除 open_id = 10
表中沒有 tracking
的任何日期。
要包含左表() 中的所有day
天,無論tracking
中的符合項目為何,請將open_id
條件移至ON
子句中:
<code class="language-sql">SELECT day.days, COUNT(*) AS opens FROM day LEFT OUTER JOIN tracking ON day.days = DAY(FROM_UNIXTIME(open_date)) AND tracking.open_id = 10 GROUP BY day.days;</code>
此更正後的查詢可確保包含所有日期,提供完整的每日頁面開啟計數,即使某些日子在 tracking
表中缺少帶有 open_id = 10
的條目。 這些天的 COUNT(*)
將返回 0。
以上是為什麼我的左外連接只傳回左表的部分資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!