标签:
比如现在有一人员表 (表名:peosons) drop table PERSONS; create table PERSONS ( PNAME VARCHAR2(50), CARDID VARCHAR2(18), ADDRESS VARCHAR2(100) ); insert into persons ( PNAME, CARDID, ADDRESS) values ( '张三', '430682199002121010', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '李四', '430682199002121010', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '王五', '430682199002121010', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '张三', '430682199002121010', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '赵六', '430682199002121011', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '赵六', '430682199002121011', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '小李子', '430682199002121011', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '小李子', '430682199002121012', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '小张子', '430682199002121013', '深圳'); insert into persons ( PNAME, CARDID, ADDRESS) values ( '小张子', '430682199002121013', '深圳'); commit; 若想将姓名、身份证号、住址这三个字段完全相同的记录查询出来 select p1.* from persons p1, persons p2 where p1.rowid <> p2.rowid and p1.cardid = p2.cardid and p1.pname = p2.pname and p1.address = p2.address; SQL> select p1.* 2 from persons p1, persons p2 3 where p1.rowid <> p2.rowid 4 and p1.cardid = p2.cardid 5 and p1.pname = p2.pname 6 and p1.address = p2.address; PNAME CARDID ADDRESS -------------------- ------------------ -------------------- 张三 430682199002121010 深圳 张三 430682199002121010 深圳 赵六 430682199002121011 深圳 赵六 430682199002121011 深圳 小张子 430682199002121013 深圳 小张子 430682199002121013 深圳 已选择6行。 可以实现上述效果。 几个删除重复记录的SQL语句 1.用rowid方法 2.用group by方法 3.用distinct方法 1.用rowid方法 据据oracle带的rowid属性,进行判断,是否存在重复,语句如下: select * from persons a where rowid != (select max(rowid) from persons b where a.pname = b.pname and a.cardid = b.cardid and a.address = b.address); SQL> select * 2 from persons a 3 where rowid != (select max(rowid) from persons b 4 where a.pname = b.pname 5 and a.cardid = b.cardid 6 and a.address = b.address); PNAME CARDID ADDRESS -------------------- ------------------ -------------------- 张三 430682199002121010 深圳 赵六 430682199002121011 深圳 小张子 430682199002121013 深圳 删除重复数据,保留rowid最大值 delete from persons a where rowid != (select max(rowid) from persons b where a.pname = b.pname and a.cardid = b.cardid and a.address = b.address); 2.group by方法 select count(pname) , max(pname) from persons --列出重复的记录数,并列出他的name属性 group by pname -- --按panme分组后找出表中pname列重复,即出现次数大于一次 having count(*) > 1 SQL> select count(pname) , max(pname) 2 from persons 3 group by pname 4 having count(*) > 1; COUNT(PNAME) MAX(PNAME) ------------ -------------------------------------------------- 2 赵六 2 小张子 2 小李子 2 张三 删除数据 delete from persons where pname in (select pname from persons group by pname having count(*) > 1);
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/u012750578/article/details/47029655