首頁 >資料庫 >mysql教程 >為什麼我的左外連接只傳回左表的部分資料?

為什麼我的左外連接只傳回左表的部分資料?

Susan Sarandon
Susan Sarandon原創
2025-01-23 16:08:10382瀏覽

Why Does My Left Outer Join Only Return Partial Data From the Left Table?

左外連接和左表中的不完整數據

了解連接條件如何影響左外連接的結果至關重要。 條件放置不正確可能會導致左表中的資料不完整。

讓我們檢查一下這個查詢:

<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中文網其他相關文章!

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