如何在Criteria中编写子查询

时间:2009-10-27 22:02:05

标签: group-by subquery criteria torque

我有这样的SQL:

Select tbl.id, tbl.name 
From 
 (select table1.id, table1.name
 from table1
 inner join table2 on table1.id = table2.id
 order by table2.priority
 ) tbl 
group by table1.id
order by table1.name

我想要实现的是首先排序(按table2.priority排序),然后获得具有最高优先级table1.id, name的记录。 注意,MAX(table2.priority)在这里不起作用,因为table1table2是一对多,而对于一个table1记录,table2可以有N个记录,其中优先级最高= 1,其中另一个table1记录的优先级最高= 3。

1 个答案:

答案 0 :(得分:0)

如果您只需要结果中的一条记录,并且它们的顺序使您所需的记录位于排序的结尾(或开头),则只需将结果限制为一。即:

SELECT tbl.id, tbl.name
FROM (
    SELECT table1.id, table1.name
    FROM table1
    INNER JOIN table2 ON table1.id = table2.id
    ORDER BY table2.priority
) tbl
GROUP BY table1.id
ORDER BY table1.name
LIMIT 1;

请注意,根据订单,您可以指定ASC或DESC以确保正确的记录是您检索的记录。