SQL选择具有多个共同值的行

jmp*_*mpp 3 mysql sql

我根据条件选择一些文章行有问题.

这是我的问题:我的所有文章都附加了几个"标签",所以我的结构如下所示:

articles       articles_tags       tags
¯¯¯¯¯¯¯¯       ¯¯¯¯¯¯¯¯¯¯¯¯¯       ¯¯¯¯
  id           article_id          id
  title        tag_id              name
  content
  [...]
Run Code Online (Sandbox Code Playgroud)

现在我想选择所有包含BOTH标签2和3的文章.我试过这个:

SELECT * FROM articles a
JOIN articles_tags at
    ON (a.id = at.article_id)
WHERE
    at.tag_id IN(2, 3)
GROUP BY article_id
Run Code Online (Sandbox Code Playgroud)

但是这将选择所有具有最少标签ID#2或#3的文章(毕竟是逻辑)

是否有任何技巧或东西只能获得具有已定义标签ID列表的文章?

谢谢

Joh*_*Woo 6

这个问题被称为 Relational Division

SELECT  a.*
FROM    articles a
        INNER JOIN
        (
            SELECT at.article_id 
            FROM   articles a
                   INNER JOIN articles_tags at
                      ON a.id = at.article_id
            WHERE  at.tag_id IN(2, 3)
            GROUP  BY at.article_id
            HAVING COUNT(*) = 2
        ) b ON a.id = b.article_id
Run Code Online (Sandbox Code Playgroud)