我有三张桌子。
news:
id
title
categories:
id
name
newsEachCategories:
postId
categoryId
表newsEachCategories保存每个帖子的id和它所发布的类别的id。
因此,如果id为13的帖子已经发布在类别6和类别7中,则有两个条目,一个是“postId 13,categoryId 6”,另一个是“postId 13,categoryId 7”。
因此,为了找到一个类别(比如id为5的类别)中的所有帖子,我使用:
SELECT news.title , news.editedTitle , news.id
FROM news JOIN newsEachCategories
ON news.id = newsEachCategories.postId
WHERE newsEachCategories.categoryId = 5
如果我想选择同时属于类别5和类别6的帖子,我应该如何synxtax我的查询?
最佳答案
若要仅返回两个类别中存在的结果,可以使用COUNT()
聚合并在HAVING
子句中验证返回2个结果。
在这个解决方案中,我加入了一个子查询,该子查询返回COUNT()
perpostId
,并且限制在这两个类别中。它被连接回主表以获取您想要的特定news.id
的其余列。
SELECT
news.title,
news.editedTitle,
news.id
FROM
news
/* Join against subquery to count occurrences in newsEachCategories */
JOIN (
SELECT postId, COUNT(DISTINCT categoryId) AS postcount
FROM newsEachCategories
/* Limit to categories 5 & 6 */
WHERE categoryId IN (5, 6)
GROUP BY postId
/* Ensures a result was returned for each category 5, 6 */
HAVING postcount = 2
) postCounts ON news.id = postCounts.postId
关于mysql - MySQL-查询语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14005726/