我想知道是否有办法表达类似的东西
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处理这个话题,但显然那是不可能的。也许现在呢?
接受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")
很可能简化这一点 - 但它应该可以帮助你完成大部分工作。