首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除重复行数据

删除重复行数据
EN

Stack Overflow用户
提问于 2014-04-23 18:07:50
回答 3查看 128关注 0票数 0

我需要从我的表(user_info)中删除副本。我总是希望删除从下面的select/having查询返回的两行中较低的id列的行。关于如何编写delete语句以从下面的select/having查询结果中删除重复项(较低的user_info.id列),有什么想法吗?我在用甲骨文11g。

user_info表结构:

代码语言:javascript
复制
id (unique primary key number 10 generated by sequence)
user_id (number 10)
first_name (varchar2)
last_name (varchar2)

数据示例:

代码语言:javascript
复制
id      user_id
______  ___________
37265   1455
265798  1455

显示重复项的sql:

代码语言:javascript
复制
select user_id, count(*)
  from user_info
 group by user_id
HAVING count(*) > 1 
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-23 18:10:10

从这个开始,只显示重复的

代码语言:javascript
复制
Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) LargestId
From user_info
Group by user_id
HAVING count(*) > 1 

这将显示每个user_id的最小和最大值(如果没有重复值,则SmallestId和LargestId的值相同)。

代码语言:javascript
复制
Select user_id, count(*) NumRows, Min(Id) SmallestId, Max(Id) LargestId
From user_info
Group by user_id

对于用户,您希望保留MaxId并删除所有其他内容。这样您就可以编写一个DELETE语句

代码语言:javascript
复制
DELETE From user_info
Where Id Not IN
(
    Select Max(Id)
    From user_info
    Group by user_id
)

这个会让你

票数 1
EN

Stack Overflow用户

发布于 2014-04-23 18:11:08

您可以使用以下查询:

代码语言:javascript
复制
DELETE 
FROM user_info
WHERE id NOT IN
    (SELECT MAX(id)
    FROM user_info
    GROUP BY user_id);

此查询将删除除具有最大user_idid行之外的所有重复行。

下面是一个演示删除的SQL Fiddle

票数 3
EN

Stack Overflow用户

发布于 2014-04-23 18:32:47

代码语言:javascript
复制
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)

这个查询使用子查询进行同样的操作!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23252020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档