0

如何使用 DSL 方法生成SELECT查询WHERE

例子:

SELECT *
FROM table
WHERE id IN (
    SELECT MAX(id)
    FROM table
    GROUP BY name
);
4

1 回答 1

1

更新:

现在Exposed已经添加InSubQueryOp

Table.run {
    select { id inSubQuery slice(id.max()).selectAll().groupBy(column) }
}

经过搜索,我在 GitHub 上发现了这个问题。wrapAsExpression可用于编写子查询。

  1. 复制EqOp并转换为InOp

    class InOp(expr1: Expression<*>, expr2: Expression<*>) : ComparisonOp(expr1, expr2, "IN")
    
  2. 复制eq然后将其转换为inExpr扩展功能

    infix fun<T, S1: T?, S2: T?> Expression<in S1>.inExpr(other: Expression<in S2>) : 
    Op<Boolean> = InOp(this, other)
    
  3. 使用它们

    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)
于 2019-02-14T10:11:34.503 回答