Sql 删除重复的行数据
我需要从我的表用户信息中删除重复项。我始终希望删除id列在下面的select/having查询返回的两行中较低的行。关于如何编写delete语句以从下面我的select/having查询的结果中删除重复的lower user_info.id列,您有什么想法吗?我正在使用Oracle 11g 用户信息表结构: 数据示例: 要显示重复项的sql:Sql 删除重复的行数据,sql,oracle,Sql,Oracle,我需要从我的表用户信息中删除重复项。我始终希望删除id列在下面的select/having查询返回的两行中较低的行。关于如何编写delete语句以从下面我的select/having查询的结果中删除重复的lower user_info.id列,您有什么想法吗?我正在使用Oracle 11g 用户信息表结构: 数据示例: 要显示重复项的sql: 从这里开始,只显示重复项 Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) La
从这里开始,只显示重复项
Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) LargestId
From user_info
Group by user_id
HAVING count(*) > 1
这将显示每个用户id的最小值和最大值,如果没有重复项,则SmallestId和LargestId的值相同
Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) LargestId
From user_info
Group by user_id
对于用户,您希望保留MaxId并删除所有其他内容。因此,您可以编写一个DELETE语句
DELETE From user_info
Where Id Not IN
(
Select Max(Id)
From user_info
Group by user_id
)
这将获得从这个开始的仅显示重复项
Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) LargestId
From user_info
Group by user_id
HAVING count(*) > 1
这将显示每个用户id的最小值和最大值,如果没有重复项,则SmallestId和LargestId的值相同
Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) LargestId
From user_info
Group by user_id
对于用户,您希望保留MaxId并删除所有其他内容。因此,您可以编写一个DELETE语句
DELETE From user_info
Where Id Not IN
(
Select Max(Id)
From user_info
Group by user_id
)
这将得到您可以使用以下查询的:
DELETE
FROM user_info
WHERE id NOT IN
(SELECT MAX(id)
FROM user_info
GROUP BY user_id);
此查询将删除除id最大的用户id行以外的所有重复行
下面是一个演示删除的示例。您可以使用以下查询:
DELETE
FROM user_info
WHERE id NOT IN
(SELECT MAX(id)
FROM user_info
GROUP BY user_id);
drop table test;
/
create table test
(
ids number,
user_id number
);
/
insert into test
values(37265,1455);
/
insert into test
values(265798,1455);
/
select * from test;
delete from test t
where t.ids < (select max(ids) from test t1 where T1.USER_ID= T.USER_ID)
此查询将删除除id最大的用户id行以外的所有重复行
下面是一个演示删除的示例
drop table test;
/
create table test
(
ids number,
user_id number
);
/
insert into test
values(37265,1455);
/
insert into test
values(265798,1455);
/
select * from test;
delete from test t
where t.ids < (select max(ids) from test t1 where T1.USER_ID= T.USER_ID)
此查询使用子查询执行相同的操作
此查询使用子查询执行相同的操作 重复行是否可以超过2行?不,最多只能有2行。重复行是否可以超过2行?不,最多只能有2行。@MarshallTigerus感谢您的反馈。OP确实希望删除重复的下用户\ u info.id列,以便保留两个id中较大的一个。@MarshallTigerus感谢您的反馈。OP确实希望删除“重复”下的“用户信息”列,以便保留两个id中较大的一个。