华为笔试题

只有一题,题目如下

表 我就建一张简单的
create table pp(
pname varchar2(20)
);

插入字段
insert into pp values(‘aaa’);
insert into pp values(‘bbb’);
insert into pp values(‘ccc’);

insert into pp values(‘aaa’);
insert into pp values(‘bbb’);
insert into pp values(‘ccc’);

insert into pp values(‘aaa’);
insert into pp values(‘bbb’);
需求 : 使用一条语句删除表中重复的记录,

我们需要使用oracle,否则几乎不可能完成

根据rowid来完成需求

1.使用子查询的写法

delete from pp p1 where rowid > (select min(rowid) from pp p2 where p1.name = p2.name);

根据name查询当前name最小的rowid, 然后判断 rowid 是否大于 查询的最小的rowid, 如果大于了,就证明不是最小的rowid, 那么就是可删除的

2.使用普通的写法

delete from pp where rowid not in(select min(rowid) from pp where rowid is not null group by name );

使用分组,聚合函数找到所有最小的rowid, 然后删除所有rowid 不等于最小rowid中的任何一个,

使用rownum不知道能不能完成,我个人感觉不行,,,,,有兴趣的话可以试试

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值