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

具有公共成员的SQL查找集(关系除法)

谢善
2023-03-14
问题内容

我有单独的“类”和“组”集,每个组都分配了一个或多个标签。我想为每个组找到包含每个组相同(或更多)标签的类的子集。

一些样本数据:

declare @Groups table
(
    GroupID int,
    TagID int
)

insert @Groups
values (1,1),(1,2),(1,3),
    (2,1),(2,2),
    (3,1),(3,2),(3,3),(3,4)

declare @Classes table
(
    ClassID int,
    TagID int
)

insert @Classes
values (1,1),(1,2),
    (2,1),(2,2),
    (3,1),(3,2),(3,3)

select * from @Groups
select * from @Classes

并输出:

GroupID TagID
1       1
1       2
1       3
2       1
2       2
3       1
3       2
3       3
3       4

ClassID TagID
1       1
1       2
2       1
2       2
3       1
3       2
3       3

结果集示例如下所示:

declare @Results table
(
    GroupID int,
    ClassID int
)

insert @Results
values (1,3),(2,1),(2,2),(2,3),(3,null)

select * from @Results

结果输出:

GroupID ClassID
1       3
2       1
2       2
2       3
3       NULL

我了解这是一个涉及having和的关系划分类型问题count。这些帖子描述了我想做的事情,但我不知道


问题答案:

我认为这也应该起作用

select distinct g.GroupID, c.ClassID
from @Groups g
    left join @Classes c on g.TagID = c.TagID
where not exists (
    select *
    from @Groups g2
    where g2.GroupID = g.GroupID
        and g2.TagID not in (
            select TagID
            from @Classes c2
            where c2.ClassID = c.ClassID
        )
    ) or c.ClassID is null


 类似资料:
  • 我有一个收藏如下 我想知道这张地图上是否有任何条目被设置为同一张地图的另一个条目。 例如,让我们说地图有以下5个条目 因此,它可能有以下重叠项 或者只是一组按键列表,比如 我可以迭代每个键集,然后对每个键集使用disjoint或anyMatch,但我想知道是否有一种优化方法(Java8、9、10、11)。

  • 2-查询id为1的人的所有地址,2我想: 好的方法是什么?

  • 问题内容: 不太确定如何获得这个。我有一个职员表,我需要找到平均工资。我知道我可以使用use 。但是,诀窍是我需要找到拥有5名以上职员的部门的平均值。我不确定是否应使用分组依据或使用方式。谢谢! 问题答案:

  • 访问级别修饰符如何改变内部私有类中成员的行为?我有这个密码 属性是私有的:我可以从Main访问它,但不能从Main外部访问它(因为Inner是私有的) 属性是public的:我仍然可以从Main访问它,但不能从Main外部访问它(因为Inner是private的) 我看不出有什么不同

  • 问题内容: 我正在考虑一个应用程序的设计,该应用程序的主要功能围绕着找到所有给定集合的子集的集合的能力而展开。 例如,给定输入集A = {1,2,3 … 50}和集合集B = {B1 = {3,5,9,12},B2 = {1,6,100,123,45}。 .. B500 = {8,67,450}},返回所有属于A子集的B。 我想它与搜索引擎类似,除了我并没有设置A小而B大的奢侈。在我的情况下,B通

  • 问题内容: 我真的很不擅长SQL,我想知道我可以使用哪种SQL解决这个问题,在这个问题以下我怀疑是NP完全问题,但是我认为查询需要很长时间才能在大型数据集上运行因为这将作为后台任务完成。首选标准sql语句,但是如果需要存储过程,则使用它。SQL必须在Postgres 9.3上运行。 问题:给定一组包含一组关键字的文章,请为每条包含最多匹配关键字的文章查找前n条文章。 文章表的精简版本如下所示: 这