如何使用 DSL 方法生成SELECT
查询WHERE
?
例子:
SELECT *
FROM table
WHERE id IN (
SELECT MAX(id)
FROM table
GROUP BY name
);
如何使用 DSL 方法生成SELECT
查询WHERE
?
例子:
SELECT *
FROM table
WHERE id IN (
SELECT MAX(id)
FROM table
GROUP BY name
);
更新:
现在Exposed
已经添加InSubQueryOp
。
Table.run {
select { id inSubQuery slice(id.max()).selectAll().groupBy(column) }
}
经过搜索,我在 GitHub 上发现了这个问题。wrapAsExpression
可用于编写子查询。
复制EqOp
并转换为InOp
class InOp(expr1: Expression<*>, expr2: Expression<*>) : ComparisonOp(expr1, expr2, "IN")
复制eq
然后将其转换为inExpr
扩展功能
infix fun<T, S1: T?, S2: T?> Expression<in S1>.inExpr(other: Expression<in S2>) :
Op<Boolean> = InOp(this, other)
使用它们
Table.run {
select { id inExpr wrapAsExpression(slice(id.max()).selectAll().groupBy(column)) }
}
示例输出:
SELECT `user`.id, `user`.name, FROM `user` WHERE `user`.id IN (SELECT MAX(`user`.id) FROM `user` GROUP BY `user`.name)