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")
很可能可以对此进行简化 - 但它应该可以帮助您完成大部分工作。
我想知道是否有办法表达类似
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")
很可能可以对此进行简化 - 但它应该可以帮助您完成大部分工作。