簡體   English   中英

當將COUNT與LEFT OUTER JOIN和GROUP BY一起使用時,MySQL包含零行

[英]MySQL include zero rows when using COUNT with LEFT OUTER JOIN and GROUP BY

如何避免以零次會議淘汰用戶? 我知道也有類似的問題,但是這段代碼要復雜得多。

SELECT user.userID, user.contactName, user.email, COUNT( * ) AS meetingsCount
FROM user
LEFT OUTER JOIN meeting ON user.userID = meeting.userID
WHERE user.userID NOT 
IN ( 1, 2, 3, 4, 5, 59, 62, 63, 64, 66, 69, 71, 72, 73, 78, 107 ) 
AND SUBSTRING( meeting.meetingCode, 5, 2 ) 
BETWEEN 12 
AND 22 
AND SUBSTRING( meeting.meetingCode, 7, 2 ) 
BETWEEN 01 
AND 12 
AND SUBSTRING( meeting.meetingCode, 9, 2 ) 
BETWEEN 01 
AND 31 
GROUP BY user.userID, contactName, email
ORDER BY meetingsCount DESC

您需要在聯接中放入會議代碼表的邏輯。 否則,與您從會議表中過濾掉的記錄相匹配的用戶將被從結果中過濾掉。 使您的JOIN本質上成為內部聯接。 我認為您還應該在BETWEEN子句中的值周圍加上單引號。

SELECT  user.userID, user.contactName, user.email, COUNT( meeting.userID ) AS meetingsCount

FROM    user

        LEFT OUTER JOIN meeting ON user.userID = meeting.userID
        AND SUBSTRING( meeting.meetingCode, 5, 2 ) BETWEEN '12' AND '22'
        AND SUBSTRING( meeting.meetingCode, 7, 2 ) BETWEEN '01' AND '12'
        AND SUBSTRING( meeting.meetingCode, 9, 2 ) BETWEEN '01' AND '31' 

WHERE user.userID NOT IN ( 1, 2, 3, 4, 5, 59, 62, 63, 64, 66, 69, 71, 72, 73, 78, 107 ) 

GROUP BY user.userID, contactName, email

ORDER BY meetingsCount DESC

暫無
暫無

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

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