SQL删除重复数据只留一条

cs_kill_you 2012-02-29 08:41:20
id name
--------
100 aa
100 aa
200 bb
200 bb

请问ORACLE的SQL怎么写,重复的数据只留一条,哪位高手帮忙解决一下,谢谢!
...全文
300 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
quanhj 2012-03-01
  • 打赏
  • 举报
回复
这个方法很多。
delete from table_name a where rowid >( select min(rowid) from table_name b where a.id=b.id )
tianxia198909 2012-03-01
  • 打赏
  • 举报
回复
delete from table where rowid not in (select min(rowid) from table group by栏位名)
90后小朋友 2012-03-01
  • 打赏
  • 举报
回复
select DISTINCT* from table
然后 创建表 2
然后插入到表2 然后删除表1
勿勿 2012-03-01
  • 打赏
  • 举报
回复
SELECT DISTINCT * FROM TB
cs_kill_you 2012-02-29
  • 打赏
  • 举报
回复
多谢谢大家,现在才知道有ROWID这个东西,呵呵!
我心飞翔 2012-02-29
  • 打赏
  • 举报
回复
如果数据记录不是很多的情况下,可以通过中间表来实现。
实测数据:

-- 删除重复的记录
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;


结果:
秋雨飘落 2012-02-29
  • 打赏
  • 举报
回复
去重复的方法很多,
普通的写法

delete from a where a.rowid < (select max(b.rowid) from a b where a.id = b.id)

再有,就是上面的分析函数 ,或者 row_number
lianghuifa 2012-02-29
  • 打赏
  • 举报
回复
select id,name
from (
select id,name
rank() over(partition by id,name order by id,name) num
from table)
where num =1;

楼上的方法也可以,偶这个方法是查询出唯一不重复记录,楼主可以参考参考
cowboyhn 2012-02-29
  • 打赏
  • 举报
回复
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);

3,499

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧