![](/img/trans.png)
[英]How do you implement inheritance with tables that have multi-column/composite primary keys (JPA 1.0 @IdClass)?
[英]How do you create a multi-column subquery in jooq
我试图进行模仿以下SQL的JOOQ查询:
select label,orderdate,price
from orders
where (label,orderdate) in (select label,max(orderdate) from orders group by label);
有没有办法在JOOQ中做到这一点?
使用DSL.row()
构造函数。
DSL.using(configuration)
.select(ORDERS.LABEL, ORDERS.ORDERDATE, ORDERS.PRIC)
.from(ORDERS)
.where(row(ORDERS.LABEL, ORDERS.ORDERDATE)
.in(select(ORDERS.LABEL, max(ORDERS.ORDERDATE))
.from(ORDERS)
.groupBy(ORDERS.LABEL)))
.fetch();
此处提供更多信息: https : //www.jooq.org/doc/latest/manual/sql-building/conditional-expressions/in-predicate-degree-n
但是请注意,如果您的数据库支持窗口功能,则该替代查询可能会更快:
select label, orderdate, price
from (
select
label, orderdate, price,
rank() over (partition by label order by orderdate desc) rk
from orders
) orders
where rk = 1
jOOQ也将对此提供支持
如果使用的是Oracle,则最快的解决方案是使用FIRST
函数(不完全等效:如果每个orderdate
有多行,则只会得到一行):
select
label,
MAX(orderdate) KEEP (DENSE_RANK FIRST ORDER BY orderdate DESC),
MAX(price) KEEP (DENSE_RANK FIRST ORDER BY orderdate DESC)
orders
group by label
jOOQ也支持此功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.