SQL语句面试题

大步向前001 2010-09-03 04:50:16
某个表5个字段,有两个记录一模一样,现在删除一条,保留其中一条,用什么方法做?
例如有表:test
字段
name price date
name1 23 2010-09-02
name2 24 2010-09-01
name1 23 2010-09-02
name3 35 2010-09-02
name4 25 2010-08-23
...全文
968 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
zmkkobe 2010-09-12
  • 打赏
  • 举报
回复
使用distinct 关键字 查询出 不重复的记录,应该可以吧
thegodofwar 2010-09-12
  • 打赏
  • 举报
回复
你想想Oracle中的view的作用,类似这个它不就是一种工具吗
thegodofwar 2010-09-12
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 zxjllz405 的回复:]
要删除,你查出来干嘛,要这样做,你先查出来然后放到另一个表,然后再把这个表删除掉然后在建一个,把数据放进去,上面的方法肯定可以实现,但是在开发中谁让你随便删除一张表啊
[/Quote]
晕,谁规定实际当中不可以删表呀,这只是一种手段,一种没有任何副作用的能达到目的高效的手段...
大步向前001 2010-09-12
  • 打赏
  • 举报
回复
要删除,你查出来干嘛,要这样做,你先查出来然后放到另一个表,然后再把这个表删除掉然后在建一个,把数据放进去,上面的方法肯定可以实现,但是在开发中谁让你随便删除一张表啊
momofisher 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 thegodofwar 的回复:]
Java code

delete from t_table where (name,price,date) in (select name,price,date
from t_table group by name,price,date having count(*)>1)
and rowid not in (select min(rowid) from t_table
grou……
[/Quote]
试试
wei_wxx 2010-09-11
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 flybird 的回复:]
建立一个临时表,distinct插入
如果一个sql来写的话 需要看是什么数据库了,如果是oracle

那么可以这样:

delete from demo where row_id in (select max(row_id) from demo a group by id,name having count(id>1) );

你试一下看行不行
[/Quote]
这个可以
dengzhanpeng 2010-09-11
  • 打赏
  • 举报
回复
14楼的可以用 的
大步向前001 2010-09-11
  • 打赏
  • 举报
回复
上面的方法都可以实现,但是不是很好。
flybird 2010-09-10
  • 打赏
  • 举报
回复
建立一个临时表,distinct插入
如果一个sql来写的话 需要看是什么数据库了,如果是oracle

那么可以这样:

delete from demo where row_id in (select max(row_id) from demo a group by id,name having count(id>1) );

你试一下看行不行
czmchen 2010-09-10
  • 打赏
  • 举报
回复
SQL语句

select * from tableName where tableName.id in ( select max (tableName.id) from tableName group by tableName.name having count (tableName.id) > 1 )


上面的语句是查找重复的语句,然后通过ID索引delete
iori20099 2010-09-10
  • 打赏
  • 举报
回复
oracle中删除重复数据可以用rowid因为这两条数据相同但是rowid不同。
delete from demo a where a.rowid <> (select max(rowid) from demo b where
b.object_id=a.object_id);
berserker0923 2010-09-10
  • 打赏
  • 举报
回复
14楼的应该有用
thegodofwar 2010-09-10
  • 打赏
  • 举报
回复
还有一种比较好的办法:oracle

SQL>create table test as select distinct * from cz;
(建一个临时表test用来存放重复的记录)

SQL>truncate table cz; (清空cz表的数据,但保留cz表的结构)

SQL>insert into cz select * from test;
(再将临时表test里的内容反插回来)
thegodofwar 2010-09-10
  • 打赏
  • 举报
回复

delete from t_table where (name,price,date) in (select name,price,date
from t_table group by name,price,date having count(*)>1)
and rowid not in (select min(rowid) from t_table
group by name,price,date having count(*)>1);

重排下版..~~( ⊙ o ⊙ )!
thegodofwar 2010-09-10
  • 打赏
  • 举报
回复

delete from t_table where (name,price,date) in (select name,price,date from t_table group by name,price,date having count(*)>1) and rowid not in (select min(rowid) from t_table group by name,price,date having count(*)>1);

这种应该不错····
wangqiang_lenovo 2010-09-10
  • 打赏
  • 举报
回复
提供思路,但拒绝提供代码:
1.使用distinct 关键字 查询出 不重复的记录
2.使用select union 关键字,将第一步查询出来的结果保存到一个新表中。
绿旅嗒 2010-09-03
  • 打赏
  • 举报
回复
distinct

steely_chen 2010-09-03
  • 打赏
  • 举报
回复
delete from tablename where id in(select id from (select count(*),max(id) as id from tablename groupfor name,price,date)as temp)


很少接触sql,这是我出工作时写过的一个例子翻出来的。希望有用。但楼主这道题我同事好像拿来面试过别人,那问的是哪种方式效率比较快
e9876 2010-09-03
  • 打赏
  • 举报
回复
昨天刚遇到同样的问题,自己解决了。
不过用的是oracle数据库,解决的方法是利用rowId
方法并不通用。
加载更多回复(3)

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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