4

我正在查询一个维护不善的建筑物数据库,其记录类似于以下内容:

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 在这种情况下不起作用。

4

1 回答 1

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)
于 2013-07-22T20:18:03.463 回答