我需要从我的表(user_info)中删除副本。我总是希望删除从下面的select/having查询返回的两行中较低的id列的行。关于如何编写delete语句以从下面的select/having查询结果中删除重复项(较低的user_info.id列),有什么想法吗?我在用甲骨文11g。
user_info表结构:
id (unique primary key number 10 generated by sequence)
user_id (number 10)
first_name (varchar2)
last_name (varchar2)数据示例:
id user_id
______ ___________
37265 1455
265798 1455显示重复项的sql:
select user_id, count(*)
from user_info
group by user_id
HAVING count(*) > 1 发布于 2014-04-23 18:10:10
从这个开始,只显示重复的
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的值相同)。
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
)这个会让你
发布于 2014-04-23 18:11:08
您可以使用以下查询:
DELETE
FROM user_info
WHERE id NOT IN
(SELECT MAX(id)
FROM user_info
GROUP BY user_id);此查询将删除除具有最大user_id的id行之外的所有重复行。
下面是一个演示删除的SQL Fiddle。
发布于 2014-04-23 18:32:47
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)这个查询使用子查询进行同样的操作!
https://stackoverflow.com/questions/23252020
复制相似问题