【问题标题】:Getting the items belonging to specified keywords and categories获取属于指定关键字和类别的项目
【发布时间】:2012-09-08 10:26:20
【问题描述】:

我有一个 keywords 和一个 categories 表,其中有一个 ID 和一个 name col(我可以' t 将它们合并到一个表中!)

有一个 articles 表,其中包含 ID、名称、文本。

还有多对多连接表:

  • ckw 用于关键字,列:key_id、article_id

  • ccat 用于类别,列:cat_id、article_id

我可以编写一个查询来获取那些属于关键字 ID 5 AND ID 7 的文章:

SELECT articles.name FROM articles
JOIN ckw ON (ckw.article_id = articles.id)
WHERE ckw.key_id IN (5, 7)
GROUP BY ckw.article_id
HAVING COUNT(ckw.key_id) = 2

但是,如果我想获得那些属于关键字 ID 5 AND ID 7,并且也属于类别 ID 12 AND ID 18 的文章怎么办?我想不出正确的查询。

【问题讨论】:

    标签: mysql sql many-to-many


    【解决方案1】:
    SELECT articles.name
    FROM articles
    inner JOIN ckw ON ckw.article_id = articles.id
    inner join ccat on ccat.article_id = articles.id
    WHERE ckw.key_id IN (5, 7) 
    and ccat.category_id in (12,18)
    GROUP BY articles.article_id , articles.name 
    HAVING COUNT(distinct ckw.key_id) = 2 
    and count(distinct ccat.category_id) = 2 
    

    【讨论】:

    • 谢谢!但是为什么要按articles.name 分组呢?
    • 因为,至少在 SQL 的正确实现中,您必须在聚合查询中按任何非聚合结果进行分组。如果你这样写SQL,将来会省去你的痛苦。 :)
    猜你喜欢
    • 2019-03-08
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    相关资源
    最近更新 更多