簡體   English   中英

左外連接不會從我的左表中返回所有行?

[英]Left Outer Join doesn't return all rows from my left table?

我正在嘗試使用以下查詢獲取每天打開的頁面數。

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

我得到的輸出是這樣的:

days opens
1   9
9   2

問題是,在我的日期表中,我有一列包含數字 1 到 30 來表示一個月中的天數。 我做了一個左外連接,我期待在天數列中顯示所有天數!

但我的查詢正在這樣做,為什么會這樣?

感謝大家的幫助。

Nanne給出的答案解釋了為什么你沒有得到想要的結果(你的 WHERE 子句刪除了行),但沒有解釋如何解決它。

解決方案是將 WHERE 更改為 AND 以便條件是連接條件的一部分,而不是連接后應用的過濾器:

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

現在左表中的所有行都將出現在結果中。

您指定連接的 tracking.open_id 必須為 10。對於其他行,它將為 NULL,因此它們不會顯示!

條件在WHERE子句中。 加入表后,評估 WHERE 條件以過濾掉所有符合條件的內容。因此,任何不匹配tracking.open_id = 10都會被丟棄。

如果要在連接兩個表時應用此條件,與整個數據集條件相比,更好的方法是將其與ON子句(即連接條件)一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM