从QueryDSL中选择

问题描述 投票:1回答:1

我想知道是否有办法表达类似的东西

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处理这个话题,但显然那是不可能的。也许现在呢?

java sql querydsl
1个回答
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")

很可能简化这一点 - 但它应该可以帮助你完成大部分工作。

© www.soinside.com 2019 - 2024. All rights reserved.