2013-07-22 98 views
4

我查询具有类似于以下记录的妥善保养楼宇数据库一个唯一的ID过滤重复的记录:有使用JPQL

ID NAME   CODE 
54 Building A a1234 
97 Building A a1234 

我使用下面的JPQL语句(其中“bCodes”进行查询时建筑规范数组):

SELECT building FROM Building building WHERE building.NAME IN (:bCodes) 

正如预期的那样,我回去都记录,如果bCodes = “A1234”。 JPQL有没有办法只撤回其中一条记录?到目前为止,我找不到一种方法 - 看起来GROUP BY和DISTINCT在这种情况下不起作用。

+0

您想要撤回哪个?挑一个任意一个? – DannyMo

+0

看来,除了ID以外,大多数重复项都具有所有重复项,所以,是的,是任意的。 – acvcu

+0

谢谢,这工作!把它放在信贷的答案的形式... – acvcu

回答

4

我会建议修复你的数据库(删除重复项,并在适当的列上添加一个唯一的约束)。但是,要回答您的问题,可以使用挑选任意ID的子查询来进一步过滤查询:

SELECT building FROM Building building 
WHERE building.code IN :bCodes 
AND building.id = (SELECT MIN(b2.id) FROM Building b2 
        WHERE b2.name = building.name 
        AND b2.code = building.code) 
+0

谢谢!不幸的是我无法修复数据库。 – acvcu

+0

有用的感谢! –