当前位置: 首页 > 知识库问答 >
问题:

QueryDSL中的多列WHERE-IN子句

鱼志学
2023-03-14

我是QueryDSL的新手,能够在WHERE-in子句中组装具有多个列的查询,如下所示:

selec T1.COL1, T1.COL2, .... T1.COL10 
from T1
where (T1.COL1, T1.COL2) IN (select T2.COL1, T2.COL2 from T2 WHERE T2.COL3='a' AND T2.COL4='b')

我有主要查询的部分:

List<Tuple> result = queryFactory.select(t1.col,...,t1.col10)
.from(t1)
.where(???) // This is the part I'm missing
.fetch();

但我不知道如何实现where子句。如何在QueryDSL中实现这一点?

提前致谢!

共有2个答案

翟昊明
2023-03-14

我不确定是否要在子查询中选择多个字段,但是对于一个字段,使用< code>JPASubQuery如下所示:

ListSubQuery<Integer> subQuery = new JPASubQuery()
    .from(t2)
    .where(t2.col3.eq('a')).and(t2.col4.eq('b'))
    .list(t2.col1);

然后在查询中使用它:

List<Tuple> result = queryFactory.select(t1.col,...,t1.col10)
    .from(t1)
    .where(t1.col1.in(subQuery))
    .fetch();

也许使用ListSubQuery可以处理多个字段

沃皓轩
2023-03-14

我也遇到了同样的问题,我花了一天的时间才找到解决办法。可以使用表达式。list()为in子句指定多个列。

因此,以下是您在 where() 子句中应包含的内容:

Expressions.list(t1.col1, t1.col2).in(
    JPAExpressions.select(t2.col1, t2.col2)
                      .from(t2)
                      .where(...)
)

希望它能帮助某人。

 类似资料:
  • 由于在抽象中解释我要做什么有点困难,所以我克隆了spring-boot-sample-data-jpa项目,并对其进行了修改,以展示我正在尝试做什么的示例。 我有这些模型类,您将注意到和扩展了实体。 我正在尝试编写一个查询,返回包含或的所有城市,其主要运动是给定类型的。 我编写了一个JPQL版本的查询,它有点难看(我不喜欢部分来表示它是一家水疗酒店),但似乎返回了我想要的。 但该查询的QueryD

  • 使用Query DSL和hibernate(Spring Data JPA)构建查询,如下所示 这里的逻辑很简单:如果有一个与某个人关联的银行帐户,则按银行ID过滤结果。 实体具有一个,它包含整数值。实体可能具有也可能没有

  • 问题内容: 我有一个数据库,其中有四列对应于开始和结束位置的地理坐标x,y。这些列是: 00 00 x1 11 我有这四个列的索引,其顺序为x0,y0,x1,y1。 我列出了大约一百种地理对组合。我将如何有效地查询此数据? 我想按照此SO答案的建议执行类似的操作,但它仅适用于Oracle数据库,不适用于MySQL: 我以为可能对索引做些什么?最好的方法是什么(即:最快的查询)?谢谢你的帮助! 笔记

  • 问题内容: 在处理大型数据库时,哪个性能更好,还是在SQL子句中? 它们的执行方式有什么不同吗? 问题答案: 我假设您想知道以下两者之间的性能差异: 根据MySQL手册,如果值是常数,则对列表进行排序,然后使用二进制搜索。我可以想象一下,它们以不特定的顺序进行逐一评估。因此在某些情况下速度更快。 最好的了解方法是使用特定数据在数据库中同时对它们进行概要分析,以查看哪种方法更快。 我在具有10000

  • 例如,我想做这样的事情: 新建Select().from(Table).where(“id in?”,list).execute()