sql查询,包括子集但排除超集

jaql4c8m  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(319)

我有两个实体: Games (让它有对象 a , b ) Tags (让它有对象 1 , 2 )
还有一张连接桌 GameTags 它与两个实体都有一对多的关系( Games & Tags ). 这意味着如果 a 关联到 1 以及 2 以及 b 关联到 1 ,则表中将有三条记录 GameTags .

问题:

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

天真的方法:

我考虑过的一种幼稚的方法——全部执行 2^n -1 sql查询并为所有生成的游戏查找所有标记并与 ST 排除不属于 ST . 但是,我相信一定有更好的方法来处理sql中的集合。

bxfogqkk

bxfogqkk1#

必须使用如下所示的exists子查询:

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

相关问题