免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6335 | 回复: 7

去重复行 [复制链接]

论坛徽章:
0
发表于 2007-02-14 12:51 |显示全部楼层
(真的不知道怎么在标题里描述这个问题)
一个表有2列number(1),内容为:
1 2
2 1
2 3
3 2

顺序无关,如何去掉重复的行。比如,如果1 2和2 1都存在,我只要留其中之一,留哪个都行。

我想得到:
1 2 (或2 1)
2 3 (或3 2)

多谢

论坛徽章:
0
发表于 2007-02-14 14:54 |显示全部楼层
建立一个中间表,结构和原表相同,但是a列大于b列
使用select distinct检索中间表,删除冗余的行, 并插回原表

论坛徽章:
0
发表于 2007-02-14 20:48 |显示全部楼层
distinct 就是去掉重复行应该可以的吧

论坛徽章:
0
发表于 2007-02-14 21:09 |显示全部楼层
队的

论坛徽章:
0
发表于 2007-02-15 16:14 |显示全部楼层
假设表中有条记录是4 5 ,而且不出现5 4这样情况,那么在插入中间表的时候这个不重复的记录4 5不是被去除掉了吗?

论坛徽章:
0
发表于 2007-02-16 10:05 |显示全部楼层

不知道是不是最好的方案

create table t1 (a number, b number)

insert into table t1 values (1, 2)
insert into table t1 values (2, 1)
insert into table t1 values (3, 1)
insert into table t1 values (1, 3)
insert into table t1 values (6, 6)
insert into table t1 values (6, 6)
insert into table t1 values (5, 4)

create table t2 as select * from t1 where 1=2

alter table t2 add (dummy number)

merge into t2
using (select distinct a, b from t1 where a <= b) tmp on (tmp.a = t2.a and tmp.b = t2.b)
when matched then update set t2.dummy = 0
when not matched then insert (a, b) values (tmp.a, tmp.b)
-- 3 rows merged

select * from t2

1 2
6 6
1 3


merge into t2
using (select distinct b, a from t1 where a > b) tmp on (tmp.b = t2.a and tmp.a = t2.b)
when matched then update set t2.dummy = 0
when not matched then insert (a, b) values (tmp.b, tmp.a)
-- 3 rows merged

select * from t2

1 2 0
6 6
1 3 0
4 5

最后结果:
select a, b from t2

论坛徽章:
0
发表于 2007-02-16 10:41 |显示全部楼层
有点难搞,谁出这么BT的需求

论坛徽章:
0
发表于 2007-02-16 21:43 |显示全部楼层
select distinct least(lp_a, lp_b), greatest(lp_a, lp_b) from wtwang;

[ 本帖最后由 wtwang1985 于 2007-2-16 21:44 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP