首頁 >資料庫 >mysql教程 >為什麼我的左外連線只回兩行而不是三十行?

為什麼我的左外連線只回兩行而不是三十行?

Susan Sarandon
Susan Sarandon原創
2025-01-23 16:02:11921瀏覽

Why Does My Left Outer Join Only Return Two Rows Instead of Thirty?

左外連線故障排除:為何只回傳兩行

使用者嘗試使用左外連線計算每日頁面瀏覽量,但查詢意外地只傳回兩行,而不是預期的三十行。 讓我們檢查一下有問題的查詢及其解決方案。

原始查詢:

<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>

問題:JOIN 之後的 WHERE 子句

問題在於WHERE tracking.open_id = 10子句。 此條件應用於左外連接之後。 左外連接旨在包含左表 (day) 中的所有行,即使右表 (tracking) 中沒有匹配項。但是,WHERE 子句有效地過濾掉 tracking.open_id 不為 10 的任何行,從而消除 day 表中在 tracking 中缺少 open_id = 10 對應條目的行。

解決方案:將條件整合到 JOIN

要從 day 表中檢索所有 30 行,過濾條件需要是連接條件本身的一部分。 這是使用 AND 實現的:

<code class="language-sql">SELECT day.days, COUNT(tracking.open_id) 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>

請注意對 COUNT(tracking.open_id) 的變更:這可確保 tracking 中沒有符合條目的日期計數為 0,而不是 NULL,否則會導致某些資料庫系統出現問題。 此更正後的查詢正確執行左外連線並傳回預期的 30 行,準確表示每日頁面開啟。

以上是為什麼我的左外連線只回兩行而不是三十行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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