我有以下的查詢,應該是從Articles_New中選擇所有文章,它們是A)不在ArticlesInCategories_New或B)中,但沒有CategoryID = 7,8,9,10,或11.爲什麼不是這個左連接顯示左邊的表與右邊的表不匹配的所有數據? (MySQL)
通過刪除Category!=行,我確定問題是(至少)Articles_New沒有選擇Articles_New中不在ArticlesInCategories_New中的所有內容。我還是不太瞭解GroupBy,但是我基於其他問題,我嘗試過GroupBy Articles_New.ArticleID,但這並沒有改變任何事情。
SELECT
DISTINCT Articles_New.ArticleID,
DATE_FORMAT(Articles_New.PublicationDate, '%c/%e/%Y') AS ReleaseDate,
Articles_New.Title,
Articles_New.Type,
Articles_New.URL
FROM
Articles_New
LEFT JOIN ArticlesInCategories_New
ON ArticlesInCategories_New.ArticleID = Articles_New.ArticleID
WHERE
PublicationDate >= DATE_SUB(CURDATE(), INTERVAL 2 MONTH) AND
PublicationDate <= CURDATE() AND
Articles_New.Public = '1'
AND ArticlesInCategories_New.CategoryID != '7'
AND ArticlesInCategories_New.CategoryID != '8'
AND ArticlesInCategories_New.CategoryID != '9'
AND ArticlesInCategories_New.CategoryID != '10'
AND ArticlesInCategories_New.CategoryID != '11'
ORDER BY
Articles_New.PublicationDate DESC,
Articles_New.ArticleID DESC
完美地工作,謝謝!我不明白爲什麼'ArticlesInCategories_New.ArticleID IS NULL'是必需的。這不是使用'LEFT JOIN'的目的嗎? –
@John,你有2個條件。 'null'測試測試第一個條件:它返回所有有**沒有匹配**的行。另一個測試是針對第二個條件。在那裏我加了'不是空',因爲你說必須有一個匹配。 – Johan
@John,左連接返回左表(Articles_New)中的所有行,這些行的數據表匹配右表(ArticlesInCategories_New){null,表示不匹配的那些} – Johan