精华内容
下载资源
问答
  • 平时工作可能会遇到当试图对库表中某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录。 下面总结一下几种查找和删除重复记录的方法(以CZ为例): CZ的结构如下: SQL...
    平时工作中可能会遇到当试图对库表中的某一列或几列创建唯一索引时,系统提示 ORA-01452 :不能创建唯一索引,发现重复记录。

    下面总结一下几种查找和删除重复记录的方法(以表CZ为例):
    表CZ的结构如下:
    SQL> desc cz
    Name Null? Type
    ----------------------------------------- -------- ------------------

    C1 NUMBER(10)
    C10 NUMBER(5)
    C20 VARCHAR2(3)

    删除重复记录的方法原理: 
    (1).在Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是在Oracle中的哪一个数据文件、块、行上。

    (2).在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中那些具有最大rowid的就可以了,其余全部删除。

    重复记录判断的标准是:
    C1,C10和C20这三列的值都相同才算是重复记录。

    经查看表CZ总共有16条记录:
    SQL>set pagesize 100
    SQL>select * from cz;

    C1 C10 C20
    ---------- ---------- ---
    1 2 dsf
    1 2 dsf
    1 2 dsf
    1 2 dsf
    2 3 che
    1 2 dsf
    1 2 dsf
    1 2 dsf
    1 2 dsf
    2 3 che
    2 3 che
    2 3 che
    2 3 che
    3 4 dff
    3 4 dff
    3 4 dff
    4 5 err
    5 3 dar
    6 1 wee
    7 2 zxc

    20 rows selected.

    1.查找重复记录的几种方法:
    (1).SQL>select * from cz group by c1,c10,c20 having count(*) >1;
    C1 C10 C20
    ---------- ---------- ---
    1 2 dsf
    2 3 che
    3 4 dff

    (2).SQL>select distinct * from cz;

    C1 C10 C20
    ---------- ---------- ---
    1 2 dsf
    2 3 che
    3 4 dff

    (3).SQL>select * from cz a where rowid=(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c20);
    C1 C10 C20
    ---------- ---------- ---
    1 2 dsf
    2 3 che
    3 4 dff

    2.删除重复记录的几种方法:
    (1).适用于有大量重复记录的情况(在C1,C10和C20列上建有索引的时候,用以下语句效率会很高):
    SQL>delete cz where (c1,c10,c20) in (select c1,c10,c20 from cz group by c1,c10,c20 having count(*)>1) and rowid not in
    (select min(rowid) from cz group by c1,c10,c20 having count(*)>1);

    SQL>delete cz where rowid not in(select min(rowid) from cz group by c1,c10,c20);

    (2).适用于有少量重复记录的情况(注意,对于有大量重复记录的情况,用以下语句效率会很低):
    SQL>delete from cz a where a.rowid!=(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);

    SQL>delete from cz a where a.rowid<(select max(rowid) from cz b where a.c1=b.c1 and a.c10=b.c10 and a.c20=b.c20);

    SQL>delete from cz a where rowid <(select max(rowid) from cz where c1=a.c1 and c10=a.c10 and c20=a.c20);

    (3).适用于有少量重复记录的情况(临时表法):
    SQL>create table test as select distinct * from cz; (建一个临时表test用来存放重复的记录)

    SQL>truncate table cz; (清空cz表的数据,但保留cz表的结构)

    SQL>insert into cz select * from test; (再将临时表test里的内容反插回来)

    (4).适用于有大量重复记录的情况(Exception into 子句法):
    采用alter table 命令中的 Exception into 子句也可以确定出库表中重复的记录。这种方法稍微麻烦一些,为了使用“excepeion into ”子句,必须首先创建 EXCEPTIONS 表。创建该表的 SQL 脚本文件为 utlexcpt.sql 。对于win2000系统和 UNIX 系统, Oracle 存放该文件的位置稍有不同,在win2000系统下,该脚本文件存放在$ORACLE_HOMEOra90rdbmsadmin 目录下;而对于 UNIX 系统,该脚本文件存放在$ORACLE_HOME/rdbms/admin 目录下。

    具体步骤如下:
    SQL>@?/rdbms/admin/utlexcpt.sql

    Table created.

    SQL>desc exceptions
    Name Null? Type
    ----------------------------------------- -------- --------------

    ROW_ID ROWID
    OWNER VARCHAR2(30)
    TABLE_NAME VARCHAR2(30)
    CONSTRAINT VARCHAR2(30)

    SQL>alter table cz add constraint cz_unique unique(c1,c10,c20) exceptions into exceptions; 
    *
    ERROR at line 1:
    ORA-02299: cannot validate (TEST.CZ_UNIQUE) - duplicate keys found

    SQL>create table dups as select * from cz where rowid in (select row_id from exceptions);

    Table created.

    SQL>select * from dups;

    C1 C10 C20
    ---------- ---------- ---
    1 2 dsf
    1 2 dsf
    1 2 dsf
    1 2 dsf
    2 3 che
    1 2 dsf
    1 2 dsf
    1 2 dsf
    1 2 dsf
    2 3 che
    2 3 che
    2 3 che
    2 3 che
    3 4 dff
    3 4 dff
    3 4 dff

    16 rows selected.

    SQL>select row_id from exceptions;

    ROW_ID
    ------------------
    AAAHD/AAIAAAADSAAA
    AAAHD/AAIAAAADSAAB
    AAAHD/AAIAAAADSAAC
    AAAHD/AAIAAAADSAAF
    AAAHD/AAIAAAADSAAH
    AAAHD/AAIAAAADSAAI
    AAAHD/AAIAAAADSAAG
    AAAHD/AAIAAAADSAAD
    AAAHD/AAIAAAADSAAE
    AAAHD/AAIAAAADSAAJ
    AAAHD/AAIAAAADSAAK
    AAAHD/AAIAAAADSAAL
    AAAHD/AAIAAAADSAAM
    AAAHD/AAIAAAADSAAN
    AAAHD/AAIAAAADSAAO
    AAAHD/AAIAAAADSAAP

    16 rows selected.

    SQL>delete from cz where rowid in ( select row_id from exceptions);

    16 rows deleted.

    SQL>insert into cz select distinct * from dups;

    3 rows created.

    SQL>select *from cz;

    C1 C10 C20
    ---------- ---------- ---
    1 2 dsf
    2 3 che
    3 4 dff
    4 5 err
    5 3 dar
    6 1 wee
    7 2 zxc

    7 rows selected.
    展开全文
  • R语言删除/添加数据某一行/列

    万次阅读 多人点赞 2018-06-28 17:14:45
    假如数据是这样的,这是有一个数据框 &gt; A &lt;- data.frame(姓名 = c("张三", "李四"...), 体重 = c(50, 70, 80), 视力 = c(5.0, 4.8...删除一行“张三”的信息 &gt; A &lt...

    假如数据是这样的,这是有一个数据框

    > A <- data.frame(姓名 = c("张三", "李四", "王五"), 体重 = c(50, 70, 80), 视力 = c(5.0, 4.8, 5.2))
    > A
      姓名 体重 视力
    1 张三   50  5.0
    2 李四   70  4.8
    3 王五   80  5.2
    

    删除第一行“张三”的信息

    > A <- A[-1,]
    > A
      姓名 体重 视力
    2 李四   70  4.8
    3 王五   80  5.2
    

    删除第二列,删除“体重”

    > A <- A[,-2]
    > A
      姓名 视力
    2 李四  4.8
    3 王五  5.2
    

    插入一列

    y<-1:4
    data1 <- data.frame(x1=c(1,3,5,7), x2=c(2,4,6,8),x3=c(11,12,13,14),x4=c(15,16,17,18))
    data2 <- cbind(data1[,1:2],y,data1[,3:ncol(data1)])
    

    插入一行

    data1<- data.frame(x1=runif(10),x2= runif(10),x3= runif(10))
    row<- c(1, 1, 1)
    data2 <- rbind(data1[1:5,], row, data1[6:nrow(data1), ])
    

    展开全文
  • Oracle 数据库删除某一行数据

    千次阅读 2020-12-08 11:29:15
    SQL 代码: delete from table_name where ... from 后面接表名 where 后面接要删除的那行数据的字段特征。 注意字段要能保证能唯一删除条。

    SQL 代码:

    delete from table_name
    where ...

    from 后面接表名

    where 后面接要删除的那行数据的字段特征。

    注意字段要能保证能唯一删除这一条。

    展开全文
  • txt文件的格式如下 RefereeView1/192.168.0.102 RefereeView2/192.168.0.104 ArtScore1/192.168.0.107 ...比如要删除:[color=#FF0000]CompletionScore1/192.168.0.101[/color],请问如何实现?
  • 表名 table_name ...如果删除字段的值,可以将所有值清空: UPDATE table_name SET field_name = ''; 如果删除字段(这个字段从此就没有了): ALTER TABLE table_name DROP COLUMN field_name;
    表名 table_name
    要操作的字段名 field_name

    如果删除字段的值,可以将所有值清空:
    UPDATE table_name SET field_name = '';

    如果删除字段(这个字段从此就没有了):
    ALTER TABLE table_name DROP COLUMN field_name;
    展开全文
  • 使用标记:例如把这一行的前多少个字节数据修改成标记的值,读取每一行时判断是否有删除的标记。 很多工具都这样做,当到例如半夜后启动一个线程把文件被标记为删除的部分真正的删除。 转载于:...
  • 但是数据没有被清空,在新一行数据大小小于这一行的时候,可能会占用这一行。这样其实就是存储碎片,要想减少存储碎片,可以通过重建来实现(例如对于高并发大数据量表,除了归档,还可以通过利用无锁算法Alter...
  • create trigger delete_trigger after delete on table_delete1 for each row begin DELETE FROM table_delete2 WHERE column1 = old....解释:删除表 table_delete1的某行,级联删除table_delete2的行中column1...
  • 如下截图Excel,我们想删除E列为空的行数据(即黄颜色的行数据),如何批量操作呢: 1.鼠标左键选中E列。 2.键盘输入,组合键:Ctrl+G,调出定位弹窗。 3.勾选空值K。 4.点击定位,鼠标右键,定位到的...
  • SQL 数据表中删除重复行数,只保留一行 怎么实现呢,求帮助
  • 删除某一行时用:DELETE FROM 表名 WHERE 条件 修改某一列时用:ALTER TABLENAME 表名 DROP 新列名
  • dataframe中删除某一列或某一行

    万次阅读 2020-10-06 19:05:26
    1. 函数 DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 参数含义: labels:要删除或列,用列表给出 ...inplace: 默认为False,该删除操作不改变原数据;inplace = True时,改变
  • 删除文本某一行

    千次阅读 2016-07-30 14:09:15
    相信每个使用C++文件I/O的人都会遇到这样的问题,怎么删除或者修改文件特定的某一行呢? 其实在C++的文件操作没有所谓的”删除”功能,不过还是可以通过其他方法实现所谓的”删除”: 将除了要删除那特定的一行...
  • 删除DataTable某一行

    千次阅读 2018-09-20 18:08:58
    在C#,如果要删除DataTable某一行,大约有以下几种办法: 1,使用DataTable.Rows.Remove(DataRow),或者DataTable.Rows.RemoveAt(index);可以直接删除行 2,datatable.Rows[i].Delete()。Delete()之后需要...
  • jQuery删除表格一行数据

    千次阅读 2018-03-30 11:23:12
    //删除一行 $scope.delete=function(id){ for (var i = 0; i &lt; $scope.datas.length; i++) { if($scope.datas[i].gid==id) { $scope.datas.splice(i,1); break; } ...
  • 在gridview希望实现在每一行最后添加一个删除的按钮,但是发现点击每行的button时只会触发button的点击事件,并没有选中这一行,此时调用list.SelectedItem时无法得到对应的绑定数据。UI.xaml <Lis
  • 使用C++删除文本文档一行数据

    千次阅读 2016-10-10 23:54:56
    1.问题:使用C语言删除文本文档一行数据code:
  • C# winform 实现删除文件中数据一行

    千次阅读 2015-04-02 17:13:35
    C#如何能删除文件中数据一行 不说了直接上代码吧,简单粗暴 List<string> lines = new List(File.ReadAllLines(@"C:\Users\lenovo\Desktop\删除文件一行.txt")); lines.Remove("34 11"); File.WriteAllLines(@"C...
  • 5行代码实现删除excle某一行某一列

    千次阅读 2020-02-11 09:33:02
    昨天,有个excle文件,文件大小3M,打开时就转了好一会,目的是想删除里面的某一行数据,但是总提示“内存不足”,百度了无数种方法都不行 今天醒了就想起python,不如一试,网上找了教程,又遇到了各种bug调试,3个...
  • <!-- ajax异步刷新删除用户所在的前台 --> function deleteAccount(aid)//传入要删除的ID { varxhr=createXHR(); xhr.onreadystatechange=function() { if(xhr.readyState==4) { ...
  • 今天我们来总结关于sql server2012这个版本的数据库的删除语法,也就是delete的用法,我们来删除数据表中数据,用于测试,这也是我学习数据库的第五堂课,知识就是力量嘛!好了,来看看语法是怎么说的吧!...
  • 不能删除Excel某行数据时,提示: "该 ISAM 不支持在链接表中删除数据"解决方法 C#2010-07-15 22:26:51阅读204评论0 字号:大中小 订阅原来Excel不支持删除,DELETE FROM sheet1$ 报错“该 ISAM 不支持在链接...
  • QT中删除QtableWidget某一行

    千次阅读 2019-11-07 15:42:39
    private: QMenu *RightClick; //右键点击 QAction *deleteAction; //删除事件(如需要其它事件,可新定义) int iDeletcRow; private slots: void RightClickSlot(QP...
  • 一行代码删除redis里面指定数据

    千次阅读 2018-11-15 16:30:11
    目录一行代码删除指定redis数据一行代码删除所有redis数据 一行代码删除指定redis数据 redis-cli -a 密码 keys &quot;XY_KEY_100001111_*&quot; | xargs redis-cli -a 密码 del 如上是删除以“XY_KEY_...
  • 1、新建个菜单 2、在列表控件List Control新建右键消息 3、在消息函数内添加如下程序,可以弹出对话框了 CMenu menu;//新建菜单实例 POINT pt = { 0 };//用于存储鼠标位置的结构体变量,pt.x和pt.y分别...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397,056
精华内容 158,822
关键字:

删除表中某一行数据