![](/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.