如何使用单个order by子句在jOOQ中编写联合查询?

时间:2013-12-12 07:27:27

标签: java sql database oracle jooq

Docs

尝试

代码在这里:

SelectQuery<Record> selectQuery=Transaction.current().selectQuery();   
selectQuery.addSelect(Property.PROPERTY.PROPERTY_RSN);  
selectQuery.addFrom(Property.PROPERTY);  
SelectQuery<Record> selectUnionQuery=Transaction.current().selectQuery();  
selectUnionQuery.addSelect(Folder.FOLDER.FOLDER_RSN);  
selectUnionQuery.addFrom(Folder.FOLDER);  
selectQuery.union(selectUnionQuery);  
selectQuery.addOrderBy(Folder.FOLDER.FOLDER_RSN);  
selectQuery.fetch();  

任何人都可以帮我解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:2)

最近在jOOQ用户组中提出了这个问题:

jOOQ(历史性)对UNION的理解记录在这里:

这与SQL标准不同,后者将ORDER BY应用于整组子查询。解决方案是在路线图上: https://github.com/jOOQ/jOOQ/issues/1658

同时,您可以使用派生表来解决此限制:

ctx.select()
   .from(
      select(A)
     .from(T1)
     .union(
      select(B)
     .from(T2))
    )
   .orderBy(...)

请注意,您可能必须为派生表指定别名,以便访问其列。