oracle中 怎样删除某个列相同的记录:
比如有个person表,表中有person_id,person_name两个字段,名字有重复的,当做select查询时怎样
去除名字相同的记录,只保留一条。
比如有个person表,表中有person_id,person_name两个字段,名字有重复的,当做select查询时怎样
去除名字相同的记录,只保留一条。
解决方案 »
- -- 由ROW_NUMBER()函数所想到的一点点东东 --
- 是oracle的bug么?散分了!
- Oracle在插入大量数据时速度会越来越慢,请问有什么解决办法?? 急~~~~
- 要把RMAN备份跑脚本日志存成txt文件,语句该怎么写?
- 高分求教:如何通过sql语句判断提取的数据特定某字段为数字型
- 登陆Management Server mserver问题:急!!!(给分)
- oracle 如何在事务中锁定表,其他用户不能读?
- 请教ORA-03113的解决
- DX请帮忙,由于买书不便,谁有“<<Oracle 9i 中文版数据库系统管理>>赵松涛著 人民邮电出版社” 电子版或网址
- 想表达这个意思:if exists(Select CustID From PayAccount where CustID = iCustID and deptID= ideptID) then要如何写
- 求助:数据插入
- 求SQL:计算指定日期的库存余额
在Oracle中我没测试过,如果低的话可以用下面的语句delete from test a
where not exists
(
select id
from (
select min(rowid) as id
from test
group by person_name
) b
where b.id = a.rowid
)
FROM person;
FROM person;
那么用GROUP BY NAME时,SELECT 后面也只能选择NAME。
如果选了其他的,比如ID,那么必须GROUP BY ID,NAME,
实际上 这样就和DISTINCT起同样的效果了。但是我还有疑问,一个名字有多个ID,你现在只想选择出一个,
那么从多个ID选择一个的规则又是什么呢?比如第一个?
where exists
(
select id
from (
select min(rowid) as id
from person
group by personid,personname
) b
where b.id = a.rowid
)
FROM person
这个方法解决了,不知什么什么意思?
选择出来。可以查查Oracle的SQL函数,其中的analytic function部分对此有详细的介绍。