SQL查询处于休眠状态以包括子集但排除超集



我有两个实体:

  • Games(让它有对象ab(
  • Tags(让它有对象12(

和与这两个实体具有一对多关系的连接表GameTags(GamesTags(。这意味着,如果a1相关联,而2b1相关联,则表GameTags中将有三条记录。

问题:

给定,我有一个搜索标签列表(ST(,我想找到所有标签是ST的子集或等于ST的游戏。

天真的方法:

我考虑过一种天真的方法——执行所有2^n -1SQL查询,并为所有生成的游戏找到所有标签,并与ST进行比较,以排除不是ST子集的游戏。但是,我相信必须有更好的方法来处理SQL中的集合。

您必须使用这样的exists子查询:

select g from Games g
where exists (
select 1 
from g.tags t
where t.id in :tagIds
)

最新更新