2010-04-27 43 views
2

我想选择表中的每一列,但想要在我的行的单个属性(示例中为城市)上具有不同的值。我不希望额外的列像计数或任何东西,只是有限数量的结果,而且似乎不可能直接将结果限制在JPQL查询中。JPQL/SQL:如何从一个表中选择*作为单个列的组?

原始表:

ID | Name | City 
--------------------------- 
1  | John | NY 
2  | Maria | LA 
3  | John | LA 
4  | Albert | NY 

通缉的结果,如果我做了不同的城市:

ID | Name | City 
--------------------------- 
1  | John | NY 
2  | Maria | LA 

什么是做到这一点的最好方法是什么?感谢您的帮助。

+0

两个约翰和阿尔伯特在纽约。你不关心在结果中单个NY行返回哪个?关于洛杉矶也有类似的问题。 – 2010-04-27 18:12:18

+0

其实我想拥有最低编号 – DavidD 2010-04-27 18:22:08

回答

4

在JPQL,你可以做这样的事情:

select e 
from MyEntity e 
where e.id in (select min(e.id) from MyEntity e group by e.city) 

这将返回:

MyEntity [id=1, name=John, city=NY] 
MyEntity [id=2, name=Maria, city=LA] 
+0

优秀。我只需用“select *”替换“select e”即可使其工作。非常感谢! – DavidD 2010-04-27 19:44:30

0

说不上约JPQL,但SQL是:

SELECT x.* 
    FROM TABLE x 
    JOIN (SELECT MIN(t.id) AS min_id, 
       t.city 
      FROM TABLE t 
     GROUP BY t.city) y ON y.min_id = x.id 
         AND y.city = x.city 
相关问题