【问题标题】:SQL query in hibernate to include subsets but exclude supersets休眠中的 SQL 查询以包括子集但排除超集
【发布时间】:2021-03-09 03:46:33
【问题描述】:

我有两个实体:

  • Games(让它有对象a,b
  • Tags(让它有对象1,2

还有一个联结表GameTags,它与两个实体(GamesTags)具有一对多的关系。这意味着如果a 关联到12 AND b 关联到1,那么表GameTags 中将有3 条记录。

问题:

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

天真的方法:

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

【问题讨论】:

    标签: java sql database hibernate jpa


    【解决方案1】:

    您必须像这样使用存在子查询:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2010-09-24
      • 1970-01-01
      相关资源
      最近更新 更多