【发布时间】:2019-03-02 04:29:30
【问题描述】:
我需要 Union 等效项。我知道我们可以通过加入选择来做到这一点,但我无法为查询结果添加常量。这是我的sql
SELECT MIN(t1.EXAMPLE_NUMBER)
FROM
(
SELECT 1 AS EXAMPLE_NUMBER
UNION ALL
SELECT EXAMPLE_NUMBER + 1
FROM selection.SELECTION
) t1
LEFT OUTER JOIN selection.SELECTION t2
ON t1.EXAMPLE_NUMBER = t2.EXAMPLE_NUMBER
WHERE t2.EXAMPLE_NUMBER IS NULL;
此查询需要找到列的最小未使用整数。让我们说:
EXAMPLE_NUMBER
1
4
5
对于这种情况,我需要得到 2 作为结果。那就是这个的sql。所以这是我的问题:
我为此使用 QueryDsl-JPA。从 JPA 2 开始,我不能使用 UNION。所以我不能用querydsl-jpa做这个sql,我在想这样去:
JPAQuery baseQuery = new JPAQuery(em);
SubQueryExpression handleNumberOne = baseQuery.select(Expressions.constant(1));
SubQueryExpression selectAvailableMinNumber = baseQuery.select(selection.exampleNumber.add(1)).from(selection);
baseQuery.union(handleNumberOne, selectAvailableMinNumber); // 没有可用的联合
是否有任何可用的方法来使用 querydsl-JPA 做到这一点?出于这个原因,我不想包含 querydsl-sql 库,我正在寻找 JPA 风格的解决方案。我尝试将常量(在我的情况下为 1)添加到没有联合的选择查询的结果中。通过这种方式,我可能能够继续。有什么建议吗?
【问题讨论】: