A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王亮 黑马帝   /  2011-7-21 15:55  /  2207 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一个表设计得不好,有很多重复的数据,只有一个字段为主键(就是说除了主键,其他字段全相同的行存在),怎么删除重复的数据而只留下一行数据?这个不是很难,但是如果这个表更差劲,主键都没有,怎删除重复的行?想了很久……

评分

参与人数 1技术分 +1 收起 理由
admin + 1 虽然知道你在刷分,但还是再给1分

查看全部评分

1 个回复

倒序浏览
黑马网友  发表于 2011-7-21 16:29:37
沙发
您的很多问题,我感觉都没描述的太清楚。
最好是代码+描述,不要总是来一句“书上说”,大家又没看过你看的书,当然不好回答了。

在说说这个问题,与其要删除所有的重复记录,不如使用distinct关键字,消除重复后,新建立一张表。
首先,在Oracle中建立一张表,temp:[code=sql]CREATE TABLE temp(
   empno  varchar(20),
   ename  varchar(20),
   sal    number(7,2)
);[/code]然后,将emp表中的数据复制3份到temp表中:[code=sql]INSERT INTO temp
SELECT empno,ename,sal
FROM emp;[/code]把这个代码执行3遍,那么现在temp表中,就存放了3份emp表中的数据了。

接着,再创建一个表,tempDis和它temp表具有相同的字段:[code=sql]CREATE TABLE tempDis(
   empno  varchar(20),
   ename  varchar(20),
   sal    number(7,2)
);[/code]接着,执行如下代码:[code=sql]INSERT INTO tempDis
SELECT distinct empno,ename,sal
FROM temp[/code]最后,将temp表删掉,然后将tempDis再改一下名字,就可以了。

虽然稍微麻烦点,但是也能解决问题。  oracle中的存储过程等,我还不会,所以没法用那个东西回答您的问题。
SQL server2005的存储过程、触发器、自定义函数,我却有所研究,有兴趣咱们可以讨论一下。哈哈。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 这同学很有老师的潜质

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马