【发布时间】:2019-06-24 13:44:33
【问题描述】:
我有两对的三个整数值。
我想将其用作 WHERE 子句中的 IN 列表。
(2019, 5) (2019, 6) (2019, 7)
我想在这样的查询中使用上述两对列表:
SELECT
*
FROM
WEEK_REPORT A
WHERE
A.user_id IN ('test2','test5' ) AND
(A.year, A.week_no) IN ((2019,4),(2019,5),(2019,6));
为此,我将源码写如下:
// lastYear=2019, lastWeekNo=4
Tuple t = JPAExpressions.select(Expressions.constant(lastYear), Expressions.constant(lastWeekNo))
.from(weekReport)
.fetchOne();
// currentYear=2019, currentWeekNo=5
Tuple t2 = JPAExpressions.select(Expressions.constant(currentYear), Expressions.constant(currentWeekNo))
.from(weekReport)
.fetchOne();
// nextYear=2019, nextWeekNo=4
Tuple t3 = JPAExpressions.select(Expressions.constant(nextYear), Expressions.constant(nextWeekNo))
.from(weekReport)
.fetchOne();
return queryFactory
.select(weekReport)
.from(weekReport)
.where(weekReport.user.eq(user)
.and(Expressions.list(weekReport.year, weekReport.weekNo).in(t, t2, t3)))
.fetch();
但是没有输出正确的结果,出现错误。
java.lang.UnsupportedOperationException: null
at com.querydsl.jpa.JPASubQuery.fetchOne(JPASubQuery.java:66) ~[querydsl-jpa-4.1.4.jar:na]
我在官方文档中查过,但没有出来。
有办法吗?
谢谢。
【问题讨论】:
-
您可以将查询重写为
AND ((A.year = 2019 AND A.week_no = 4) OR (A.year = 2019 AND A.week_no = 5) OR ...) -
什么版本的 MySQL? “行构造函数”在 5.7.3 版本之前优化不佳。
标签: mysql sql querydsl in-clause