我有以下的查询,应该是从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