把表中重复的数据删掉 保留一行 表的顺序自动更新!

create table orders
(
    company varchar(10),
    ordernumber int
)
insert into orders
select ‘IBM‘,4566 union all
select ‘JIS‘,4565 union all
select ‘JOINY‘,4544 union all
select ‘JOINY‘,4544 union all
select ‘JOINY‘,4544 union all
select ‘EWIRU‘,2321 union all
select ‘HUIJ‘,4561 union all
select ‘HUIJ‘,4561

;with cte as
(
    select
        ROW_NUMBER() over(partition by company,ordernumber order by company,ordernumber) as ro,
         company,ordernumber
    from orders
)
--删除重复数据
delete from cte where ro>1

--重新定义顺序:顺序规则自己定义了
update orders set ordernumber=1+ro from
(select
    ROW_NUMBER() over(order by company,ordernumber) as ro
from orders) a
时间: 2024-10-12 16:03:22

把表中重复的数据删掉 保留一行 表的顺序自动更新!的相关文章

13 | 为什么表数据删掉一半,表文件大小不变?

经常会有同学来问我,我的数据库占用空间太大,我把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变? 那么今天,我就和你聊聊数据库表的空间回收,看看如何解决这个问题. 这里,我们还是针对MySQL中应用最广泛的InnoDB引擎展开讨论.一个InnoDB表包含两部分,即:表结构定义和数据.在MySQL 8.0版本以前,表结构是存在以.frm为后缀的文件里.而MySQL 8.0版本,则已经允许把表结构定义放在系统数据表中了.因为表结构定义占用的空间很小,所以我们今天主要讨论的是表数据. 接下来,

【Oracle】去除表中重复的数据

删除表重复数据 (t1表中有重复数据)1.使用distinct create table t2 as select * from t1;create table tmp_t2 as select distinct * from t2;drop table t2;alter table tmp_t2 rename to t2(需停业务) ---------------------------------------------------------------------------------

sqlite 删除表中重复数据(亲测可用)

例子:表名  Paper .通过字段PaperID查找重复数据. 1 --查询某表中重复的数据       select * from Paper group by PaperID having count(*)>1; 2--删除重复行数,只剩不重复的记录(rowid为sqlite自带字段)      delete from Paper where Paper.rowid not in (select MAX(Paper.rowid) from Paper group by PaperID);

Sql Server删除数据表中重复记录 三种方法

本文介绍了Sql Server数据库中删除数据表中重复记录的方法. [项目]数据库中users表,包含u_name,u_pwd两个字段,其中u_name存在重复项,现在要实现把重复的项删除![分析]1.生成一张临时表new_users,表结构与users表一样:2.对users表按id做一个循环,每从users表中读出一个条记录,判断new_users中是否存在有相同的u_name,如果没有,则把它插入新表:如果已经有了相同的项,则忽略此条记录:3.把users表改为其它的名称,把new_use

数据库处理表中重复数据方法

--查询表中重复数据 select * from 表名 t where t.id in ( SELECT id FROM 表名 GROUP BY id HAVING COUNT(主键编号)>1 ); --去除表中重复数据 delete from 表名 a where rowid not in ( select max(b.rowid) from 表名 b where a.主键编号 = b.主键编号 );数据库处理表中重复数据方法,布布扣,bubuko.com

【ORACLE】删除表中重复数据

原因 在对数据库进行操作过程中我们可能会遇到这种情况,表中的数据可能重复出现,使我们对数据库的操作过程中带来读诸多不便,那么怎么删除这些重复没有用的数据呢? 平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录. 处理方法 重复的数据可能有这样两种情况: 第一种:删除表中所有重复的数据 第二种:只保留重复数据中最新记录的一条记录[工作中常用] 删除重复数据的想法 每一行数据所对应的rowid都是独一无二的,及时表中两个数据

清除oracl中有主外键关联的表中的部分数据。

1.禁用主外键BEGINfor c in (select 'ALTER TABLE '||TABLE_NAME||' DISABLE CONSTRAINT '||constraint_name||' ' as v_sql from user_constraints where CONSTRAINT_TYPE='R') loop EXECUTE IMMEDIATE c.v_sql;end loop;end;2.清空数据源.清空所有数据.一般情况是对表进行条件删除.begin for ec in (

SqlServer删除表中重复记录

重复记录:有两个意义上的重复记录 一是完全重复的记录,也即所有字段均重复的记录: 二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 1.对于第一种重复,比较容易解决,使用 1 select distinct * from tableName 就可以得到无重复记录的结果集. 如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除 1 --查询无重复记录的结果集,并将结果集保存到临时表#Tmp 2 select distinct * into #T

SqlServer删除表中重复的记录并保留一条

--删除表 TableName 中字段 A.B.C 同时重复的数据,并保留一条 DELETE FROM dbo.TableName WHERE Id IN( --根据A,B,C三个字段查询出重复的数据 SELECT * FROM ( SELECT *,OrderNo=ROW_NUMBER() OVER(PARTITION BY A,B,C ORDER BY GETDATE()) FROM dbo.TableName ) Tmp WHERE OrderNo>1 );