当前位置: 首页 > 知识库问答 >
问题:

使用JPA从数据库的其余部分的列中查找重复项

西门品
2023-03-14

我的数据库中有几列。我想选择一列,然后返回所有值重复的记录。所以我想得到一列,检查我的列中的哪些值出现在数据库的其余部分。然后返回这些记录。假设数据库看起来像这样:

sql prettyprint-override">id;col1;col2;col3;col4

'1','ab','cd','ef','1'
'2','ad','bg','ee','5'
'3','xx','bg','cc','6'
'4','vv','zz','ff','4'
'5','zz','ee','gg','4'
'6','zz','vv','zz','2'
'7','vv','aa','bb','8'
'8','ww','nn','zz','4'
'9','zz','yy','ff','9'
'10','qq','oo','ii','3'

我希望col1的结果是这样的

4,'vv','zz','ff',4
5,'zz','ee','gg',4
6,'zz','vv','zz',2
7,'vv','aa','bb',8
9,'zz','yy','ff',9

共有1个答案

年烈
2023-03-14

在这里,我们以两种不同的方式呈现副本。第一种是您要求的格式,带有附加信息。第二种更简洁。

create table t1(
id varchar(10),
col1 varchar(10),
col2 varchar(10),
col3 varchar(10),
col4 varchar(10));
insert into t1 values
('1','ab','cd','ef','1'),
('2','ad','bg','ee','5'),
('3','xx','bg','cc','6'),
('4','vv','zz','ff','4'),
('5','zz','ee','gg','4'),
('6','zz','vv','zz','2'),
('7','vv','aa','bb','8'),
('8','ww','nn','zz','4'),
('9','zz','yy','ff','9'),
('10','qq','oo','ii','3');
select * from t1;
id | col1 | col2 | col3 | col4
:- | :--- | :--- | :--- | :---
1  | ab   | cd   | ef   | 1   
2  | ad   | bg   | ee   | 5   
3  | xx   | bg   | cc   | 6   
4  | vv   | zz   | ff   | 4   
5  | zz   | ee   | gg   | 4   
6  | zz   | vv   | zz   | 2   
7  | vv   | aa   | bb   | 8   
8  | ww   | nn   | zz   | 4   
9  | zz   | yy   | ff   | 9   
10 | qq   | oo   | ii   | 3   
with cte as(
select
  id,
  col1,
  col2,
  col3,
  col4,
  row_number() over 
    ( partition by col1
      order by id desc) r1,
row_number() over 
    ( partition by col2
      order by id desc) r2,
row_number() over 
    ( partition by col3
      order by id desc) r3,
row_number() over 
    ( partition by col4
      order by id desc) r4
from t1 
 )
select * 
from cte
where
r1 > 1
or r2 > 1
or r3 > 1
or r4 > 1;
id | col1 | col2 | col3 | col4 | r1 | r2 | r3 | r4
:- | :--- | :--- | :--- | :--- | -: | -: | -: | -:
6  | zz   | vv   | zz   | 2    |  2 |  1 |  2 |  1
5  | zz   | ee   | gg   | 4    |  3 |  1 |  1 |  2
4  | vv   | zz   | ff   | 4    |  2 |  1 |  2 |  3
2  | ad   | bg   | ee   | 5    |  1 |  2 |  1 |  1
select 'col1' as "column",
   col1 "value", 
   count(id) "count"
from t1 group by col1
having count(id)>1
union all
select 'col2',col2, count(id)
from t1 group by col2
having count(id)>1
union all
select 'col3',col3, count(id)
from t1 group by col3
having count(id)>1
union all
select 'col4',col4, count(id)
from t1 group by col4
having count(id)>1
order by "column","value";
column | value | count
:----- | :---- | ----:
col1   | vv    |     2
col1   | zz    |     3
col2   | bg    |     2
col3   | ff    |     2
col3   | zz    |     2
col4   | 4     |     3

db

 类似资料:
  • 问题内容: 如何找到重复的行?如果last_name是重复字段,我想显示 任何数据库都可以,最好是oracle。 问题答案: 假设您的服务器具有GROUP_CONCAT,因为您没有提及正在使用的服务器:

  • 我希望在QueryDSL JPA中执行此SQL请求 为了在表中找到重复的行,我应该执行这个请求。但使用QueryDSL,我无法找到编写此代码的方法。 有什么建议吗? 多谢问候,

  • 问题内容: 我需要找到表中的所有行,其中特定字段的字符串在两个或多个位置重复。 可以在MySQL语句中完成吗? 编辑 我需要获取每一行,而不仅仅是计数有多少重复项。我希望能够编辑这些字段。 问题答案: 是的,尝试这样的事情:

  • 我正在用Java开发一个使用JPA的路线规划系统。我需要创建一个findBy方法,通过包含它的城市列表来查找路线。以下是课程: 现在我尝试了,但并不惊讶它不起作用,如下所示: 有没有一种简单的方法可以使用JPA,或者我必须编写一个困难的自己的@Query并以某种方式迭代,才能通过集合找到一个实体?

  • 我正在尝试从一个搜索结果页面定位所有元素,并将它们放在一个列表中。第一个问题是找到所有的元素。我没有问题找到一个特定的元素:

  • 我有一个应用程序,我想添加一个管理页面。我希望管理页面有自己的布局从客户端布局分开。以我现有的情况来看,实现这一目标的当前“最佳”方式是什么? app.js HOC 我找到了这个。我应该创建一个和组件并过滤页面吗?