小编典典

SQL查找带有所有标签集的文章

sql

查找带有一组标签中任何一个的文章是一个相对简单的联接,并且已经讨论过:最佳数据库(MySQL)结构:包含优先标签的文章

但是,如果我正在搜索,并且想要查找带有所有标签集的文章该怎么办?

为具体起见,假定下表:

CREATE TABLE `articles` (
   `id` INT NOT NULL
);

CREATE TABLE `applied_tags` (
   `tag_id` INT NOT NULL,
   `article_id` INT NOT NULL
);

CREATE TABLE `search_tags` (
   `search_id` INT NOT NULL,
   `tag_id` TAG NOT NULL
);

我想出了这个方法,我认为这可能会起作用,但是它非常庞大,丑陋且不清楚,因此我认为必须有更好的方法:

Select articles.id from articles
where
 ( select count(*) from applied_tags
   where applied_tags.article_id == articles.id
     and applied_tags.tag_id in (select search_tags.tag_id from search_tags where search_tags.search_id == <input>) 
     ==
 (select count(*) from search_tags where search_tags.search_id == <input>)

(本质上,请计算相关标签的数量是否为期望值。)


阅读 227

收藏
2021-03-23

共1个答案

小编典典

select article_id
from applied_tags
where tag_id in ()
group by article_id
having count(*) =

这应该做。我不会发誓这是最有效的方法,但是假设tag_id +
article_id是Applied_tags的主键,它会做您想要的。如果不是(即,您可以有重复的标签),则所有投注均关闭。

2021-03-23