Выберите запрос как условие в Exposed
Как использовать метод DSL для генерации SELECT
запрос в WHERE
?
Пример:
SELECT *
FROM table
WHERE id IN (
SELECT MAX(id)
FROM table
GROUP BY name
);
1 ответ
После поиска я нашел эту проблему на 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)