首页 > 解决方案 > 如何在 JPA 中查找重复项?

问题描述

我正在尝试在 CrudRepository 中创建一个能够在我的表中为我提供重复项的方法。我想找到一个同名且生日当天的人。为此,我认为这更容易,我想首先找到所有相同的名字,然后我想过滤具有相同生日的名字。Wished Method 是一种规范,但也可以进行查询。

JPA有办法吗?

全表:

ID     Name     Birthday 
1      Jean     11.10.2019     
2      Jones    10.10.2019   
3      Jean     11.10.2019 
4      Jean     12.10.2019     

首先希望的结果,使用相同的名称过滤:

ID     Name     Birthday 
1      Jean     11.10.2019
3      Jean     11.10.2019 
4      Jean     12.10.2019     

第二个希望的结果是:

ID     Name     Birthday 
1      Jean     11.10.2019     
3      Jean     11.10.2019 

因为名字“Jean”在同一天生日。

有人可以帮忙吗?

标签: javaspringjpaspring-data-jpaspring-data

解决方案


您可以使用本机查询,例如:

SELECT Name, Birthday, COUNT(*)
FROM Users
GROUP BY Name, Birthday
HAVING COUNT(*) > 1

这可以与 一起使用JOIN以获得所需的结果:

SELECT u.ID, u.Name, u.Birthday FROM Users u
JOIN (SELECT Name, Birthday, COUNT(*) FROM Users GROUP BY Name, Birthday HAVING COUNT(*) > 1) u2 
ON u.Name=u2.Name AND u.Birthday=u2.Birthday

没有的解决方案INNER JOIN

SELECT u.ID, u.Name, u.Birthday
FROM Users u, (SELECT Name, Birthday, COUNT(*) FROM Users GROUP BY Name, Birthday HAVING COUNT(*) > 1) u2 
WHERE u.Name = u2.Name AND u.Birthday = u2.Birthday

推荐阅读