从QueryDSL中选择

时间:2017-01-17 12:51:49

标签: java sql querydsl

我想知道是否有办法说出类似

的内容
SELECT `sum(<field>)` FROM (SELECT field from ... WHERE ...)

在QueryDSL(版本4.x)中。

假设我所有商店中都有文章“绿色气球”,我需要知道我有多少“绿色气球”(我知道它是一个愚蠢的例子,但它会做;))。

SQL看起来像:

SELECT count(a.id) 
    FROM (
        SELECT art.id 
        FROM article art
        LEFT JOIN store s ON (art.storeId = s.id)
        WHERE art.name = 'green Balloon'
        GROUP BY s.id
    ) a;

如何将所述SQL翻译成QueryDSL?

编辑:因为它容易混淆:是的,这个例子很愚蠢。不,我不想'优化'SQL 。我只需要一些QueryDSL-Code生成完全相同(愚蠢)的SQL。或任何其他QueryDSL代码生成任何类型的SELECT ... FROM (SELECT ...)。如果可能的话。

There is a two year old post处理这个话题,但显然那是不可能的。也许现在呢?

1 个答案:

答案 0 :(得分:0)

接受OP只是想知道该语法是否可以在QueryDsl中重复-请考虑以下内容。

应该是这样的:

SQLExpression.select(Expressions.numberPath(Long.class, "ID").count())
             .from(SQLExpressions.select(QArticle.id().as("ID"))
                                 .from(QArticle)
                                 .leftJoin(QStore).on(QStore.id()
                                                 .eq(QArticle.storeId())
                                 .where(QArticle.name()
                                 .eq("green Balloon"))
             .as("SQ")

很可能可以简化此操作-但这应该可以帮助您实现大部分目标。