DELETE FROM TAB_NAME A WHERE NOT EXISTS(SELECT 1 FROM ( SELECT ID,NAME,MAX(ROWID) ROW_ID FROM TAB_NAME GROUP BY ID,NAME) B WHERE A.ID=B.ID AND A.NAME=B.NAME AND A.ROWID=B.ROW_ID);
select id,name from ( select id,name rank() over(partition by id,name order by id,name) num from table) where num =1;楼上的方法也可以,偶这个方法是查询出唯一不重复记录,楼主可以参考参考
去重复的方法很多, 普通的写法delete from a where a.rowid < (select max(b.rowid) from a b where a.id = b.id)再有,就是上面的分析函数 ,或者 row_number
如果数据记录不是很多的情况下,可以通过中间表来实现。 实测数据:-- 删除重复的记录 CREATE TABLE T143 ( ID NUMBER(4), NAME VARCHAR2(20) ); INSERT INTO T143 VALUES(100, 'AA'); INSERT INTO T143 VALUES(100, 'AA'); INSERT INTO T143 VALUES(200, 'BB'); INSERT INTO T143 VALUES(200, 'BB'); INSERT INTO T143 VALUES(200, 'CC'); INSERT INTO T143 VALUES(300, 'DD');-- 方法1(使用中间表) -- 1.创建中间表 CREATE TABLE T144 ( ID NUMBER(4), NAME VARCHAR2(20) ); -- 2. 将数据保存到中间表 INSERT INTO T144 SELECT DISTINCT * FROM T143; -- 3. 删除原表中所有数据 TRUNCATE TABLE T143; -- 4. 从中间表中拷贝回数据 INSERT INTO T143 SELECT * FROM T144; 结果:
多谢谢大家,现在才知道有ROWID这个东西,呵呵!
SELECT DISTINCT * FROM TB
select DISTINCT* from table 然后 创建表 2 然后插入到表2 然后删除表1
delete from table where rowid not in (select min(rowid) from table group by栏位名)
这个方法很多。 delete from table_name a where rowid >( select min(rowid) from table_name b where a.id=b.id )
SELECT ID,NAME,MAX(ROWID) ROW_ID FROM TAB_NAME GROUP BY ID,NAME) B WHERE A.ID=B.ID AND A.NAME=B.NAME AND A.ROWID=B.ROW_ID);
from (
select id,name
rank() over(partition by id,name order by id,name) num
from table)
where num =1;楼上的方法也可以,偶这个方法是查询出唯一不重复记录,楼主可以参考参考
普通的写法delete from a where a.rowid < (select max(b.rowid) from a b where a.id = b.id)再有,就是上面的分析函数 ,或者 row_number
实测数据:-- 删除重复的记录
CREATE TABLE T143
(
ID NUMBER(4),
NAME VARCHAR2(20)
);
INSERT INTO T143 VALUES(100, 'AA');
INSERT INTO T143 VALUES(100, 'AA');
INSERT INTO T143 VALUES(200, 'BB');
INSERT INTO T143 VALUES(200, 'BB');
INSERT INTO T143 VALUES(200, 'CC');
INSERT INTO T143 VALUES(300, 'DD');-- 方法1(使用中间表)
-- 1.创建中间表
CREATE TABLE T144
(
ID NUMBER(4),
NAME VARCHAR2(20)
);
-- 2. 将数据保存到中间表
INSERT INTO T144
SELECT DISTINCT * FROM T143;
-- 3. 删除原表中所有数据
TRUNCATE TABLE T143;
-- 4. 从中间表中拷贝回数据
INSERT INTO T143 SELECT * FROM T144;
结果:
然后 创建表 2
然后插入到表2 然后删除表1
delete from table_name a where rowid >( select min(rowid) from table_name b where a.id=b.id )