UNION在HQL中的订单

时间:2015-02-26 22:57:53

标签: mysql sql hibernate

如何在Mysql中执行HQL查询:

select id , date from TABLE_1
union all
select id , date from TABLE_2

order by date asc

我知道union的替代方法是提出两个单独的请求,但我希望unionorder by一起使用,因为它会对我有很大的帮助。

2 个答案:

答案 0 :(得分:1)

您可以separate查询两个查询,然后combine将结果列表拖至一个,最后sort最终列表中包含Comparator

Query query1 = session.createQuery("select t.id,t.dt from Table1 t");
Query query2 = session.createQuery("select t.id,t.dt from Table2 t");

List list1= query1.list();
List list2= query2.list();

list1.add(list2);


Collections.sort(list1, new Comparator<TABLE>(){
       public int compare (Table t1, Table t2){
           return t1.getDate().compareTo(t2.getDate());
       }
});

编辑(评论后):,如果是UNION(当查询使用UNION而不是全部联合而且没有Order By时)我们可以使用一个哈希集:

Query query1 = session.createQuery("select t.id,t.dt from Table1 t");
Query query2 = session.createQuery("select t.id,t.dt from Table2 t");

List list1= query1.list();
List list2= query2.list();

list1.add(list2);

HashSet uniqueResult = new HashSet(list1);

答案 1 :(得分:0)

需要括号 - 你拥有的是

( select id , date from TABLE_1 )
union all
( select id , date from TABLE_2
order by date asc )

你想要的是

( select id , date from TABLE_1 )
union all
( select id , date from TABLE_2 )
order by date asc