Select 来自 QueryDSL 中的 Select

Select from Select in QueryDSL

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

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

在 QueryDSL 中(版本 4.x)。

假设我在所有 商店 中有一个 文章 "green Balloon",我需要知道有多少 "green Balloon" 我总共有(我知道这是一个愚蠢的例子,但它会做 ;))。

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?

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

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

接受 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")

很可能可以对此进行简化 - 但它应该可以帮助您完成大部分工作。