当前位置: 首页 > 面试题库 >

查询以查找带有一组精确标签的帖子(多对多关系)

蔚和安
2023-03-14
问题内容

假设我有以下三个表来表达一个关系,在这些关系中,帖子被赋予了标签(多对多关系):

create table posts (id integer, content text, primary key (id));
create table tags (tag varchar(30), description text, primary key (tag));
create table post_tags (post_id integer, tag varchar(10),
    primary key (post_id, tag),
    foreign key (post_id) references posts (id),
    foreign key (tag) references tags (tag));

现在,假设我想查找所有带有标签{clever,interesting}且没有其他标签的帖子。

这是我失败的尝试。它查找带有标签{clever,interesting}的帖子,但也查找具有标签{clever,interesting,annoying}或{clever,interesting,unthical}的帖子。

select t1.post_id from post_tags as t1
    inner join post_tags as t2 on t2.post_id=t1.post_id
    where t1.tag='clever' and t2.tag='interesting';

我乐于接受任何有关更改结构以简化此操作的建议。但是,我想避免在posts表中添加以逗号分隔的标签列表之类的事情。


问题答案:

这是一个精确的关系划分问题。

在SQL
Server中,一种性能良好的方法(假设对的唯一约束post_id,tag)是

SELECT post_id
FROM   post_tags
GROUP  BY post_id
HAVING MIN(CASE
             WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
             ELSE 0
           END) = 1
       AND SUM(CASE
                 WHEN Keyword IN ( 'clever', 'interesting' ) THEN 1
                 ELSE 0
               END) = 2

因此,我不排除使用GROUP_CONCATin的想法HAVING

HAVING GROUP_CONCAT(DISTINCT Keyword ORDER BY Keyword) = 'clever,interesting'


 类似资料:
  • 问题内容: 我正在尝试做的是赋予用户按标签过滤帖子的功能,这样一来,用户 只能看到剩下的要过滤的标签。换句话说,如果用户选择 标签“ tag1”,它将显示具有该标签的帖子,并显示其他帖子,这些帖子 共享但隐藏过滤后没有可见帖子的标签。 我有table的帖子,和标签。具有 和。我已经设法使与特定的标签集一起使用: Let’s say this query gives post_ids 1, 2, 3

  • 问题内容: 我有以下表格(仅列出必需的属性) 药品(身份证,姓名), 通用(ID,名称), med_gen(med_id引用医学(id),gen_id引用一般(id),效力) 样本数据 药物 (1,“ Crocin”) (2,“ Stamlo”) (3,’NT Kuf’) 通用的 (1,“六氯丁啶”) (2,’苯甲酸甲酯’) med_gen (1,1,‘100mg’) (1、2,“ 50毫升”)

  • 问题内容: 我正在尝试查询与所有给定标记集匹配的对象。 基本上,我希望用户能够添加越来越多的标签来过滤或“缩小”其搜索结果,就像newegg.com一样。 我的表结构是一个对象表,一个标签表和一个MANY:MANY关系表ObjectsTags。所以我有一个像这样的JOIN查询: 我尝试使用IN子句/条件,如下所示: 但是我了解到,这模拟了一系列OR,因此您向查询中添加的标签越多,得到的结果就越多,

  • 问题内容: 我想了解Doctrine和Symfony2的多对多关系是如何工作的。 我已经重新创建了官方文档(goo.gl/GYcVE0)中显示的示例,并且我有两个实体类: 用户 和 组 ,如下所示。 如果我更新数据库,则会得到以下MySQL模式: 问题在于,在Symfony2中,我需要 实体 来生成查询,在这种情况下,我没有与表相关联的实体,因为该表是由框架自动创建的。 那么,如何检索与此关系表有

  • 实现了一对多的关系,它运行良好。 我的问题是当我运行下面的查询时,如果表有100个员工行,每个员工有两个部门。数据库查询被调用了101次,因为对每个员工都是调用部门查询,要完成调用全部100行需要很长时间,有没有人可以提出替代的解决方案? 输出XML:

  • 本文向大家介绍一对一、一对多的关联查询 ?相关面试题,主要包含被问及一对一、一对多的关联查询 ?时的应答技巧和注意事项,需要的朋友参考一下