我想知道是否有办法说出类似
的内容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处理这个话题,但显然那是不可能的。也许现在呢?
答案 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")
很可能可以简化此操作-但这应该可以帮助您实现大部分目标。