***====请问如何删除表中多条重复的记录,只留下ID最小的一条呢???谢谢

strutsdbk 2006-04-26 05:06:22
表结构如下:

ID(自增长,没有业务含义,主键)
code varchar 编号
name varchar 名称
price float 价格
create_datetime date 创建日期

删除掉表中 code,name,price,create_datetime 完全相同的重复记录,只留下 ID 最小的一条记录。

请问用 SQL 怎么做呢???

请问用 Hibernate 怎么做呢???

请高手指点,在线等待,谢谢。
...全文
323 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
strutsdbk 2006-05-03
  • 打赏
  • 举报
回复
CSDN 真让我失望透顶!!!
不知道大家是故意保留呢!!!还是根本就不愿意去想,去试!!
或者根本就想不出别的好方案!!

总之 我很失望,我没得到预期的结果!!谢谢各位!!
duye 2006-04-29
  • 打赏
  • 举报
回复
把最小的复制出来,其他的全部删除,然后再把最小的插入,不知道是否可行。
dongdong715 2006-04-27
  • 打赏
  • 举报
回复
select code,name,prive,create_datetime into #tb from table_name group by code,name,prive,create_datetime order by id asc
go
truncate table table_name
insert table_name(code,name,prive,create_datetime) select * from #tb
没验证的,,

strutsdbk 2006-04-27
  • 打赏
  • 举报
回复
使用 Hibernate的时候,一般都会给表设计一个 业务无关的 ID 做为主键。
一般情况下,业务数据会有重复的可能,但是 ID 不同的两条记录。
正常的操作下,在具体业务操作的时候,应该先拿出比如 编号 一样的记录,对其中 ID 最小的一个进行业务操作。

但如果数据库移植,ID规则发生改变 则重复数据就就无法判断。
所以,一般都会给表增加一个 create_datetime 字段,这个字段的数据是唯一的。除非人为的将系统日期改前。

但是我发现,给 编号 等字段加上 A键后,Hibernate 同样会重复提交相同数据。
不知道大家又没注意?
strutsdbk 2006-04-27
  • 打赏
  • 举报
回复
什么呀 把表删除 怎么可能!!!
业务一年365天24小时运行!!你把表删除!!!!

再说,你把表删除,Hibernate 就失去隐射,系统就会出错瘫痪。
需要重新启动数据库的映射!!!应用服务器也要重新启动!!!
这是根本不可能的。

delete table where id not in( select min(id) from table group by code,name,price,create_datetime

这样没问题,但 not in 效率很低。

本人寻求除此之外,不影响正常业务运行的情况下,效率比较高的方案。
haode 2006-04-27
  • 打赏
  • 举报
回复
Hibernate没用过。一般来说处理重复记录的做法是在查询的时候用distinct,如果要删除重复记录,可以考虑先建一个临时表,把不重复的记录导入临时表,然后drop原表,在把临时表的记录导入新建的表。

create table mytmp
as (select distinct * from mytable);

drop table mytable;

create table mytable
as (select * from mytmp);

drop table mytmp;
strutsdbk 2006-04-27
  • 打赏
  • 举报
回复
select 怎么会做删除动作呢??
strutsdbk 2006-04-27
  • 打赏
  • 举报
回复
这样就可以删掉了吗???
laochake 2006-04-27
  • 打赏
  • 举报
回复
select min(id),code,name,price,create_datetime
from tbName
group by code,name,price,create_datetime
strutsdbk 2006-04-27
  • 打赏
  • 举报
回复
有知道的吗??怎么没人回答我呢??
strutsdbk 2006-04-26
  • 打赏
  • 举报
回复
二:如果表中无主键,没ID字段
删除掉表中 code,name,price,create_datetime 完全相同的重复记录,只留下一条记录。

请问用 SQL 怎么做呢???


请高手指点,在线等待,谢谢。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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