删除相同记录的sql语句的写法?
表Information中有四个字段:ID,Name,Sex,Position
ID为主键,现在我想查找姓名一样的记录后,删除其中的一个,我的意思是姓名相同的记录保留一条。谢谢。
问题点数:100、回复次数:18Top
1 楼icevi(按钮工厂)回复于 2002-04-03 15:21:59 得分 0
delete from information t0
where exist (select id
from information t1
where t1.id<t0.id and t1.name=t0.name)Top
2 楼icevi(按钮工厂)回复于 2002-04-03 15:23:01 得分 30
写错了,长期喜欢将exists写成exist:(
delete from information t0
where exists (select id
from information t1
where t1.id<t0.id and t1.name=t0.name)
Top
3 楼N_chow(Yukon)回复于 2002-04-03 15:49:06 得分 30
DELETE A From information A INNER JOIN (Select MIN(ID) as ID , name from information group by name having count(*)>1) B
ON A.name=b.Name AND A.ID<>b.IDTop
4 楼aler()回复于 2002-04-03 16:26:49 得分 0
飘香JJ你在啊,去回答一下我的问题 oSQL.Start 的详细用法好么?
Top
5 楼N_chow(Yukon)回复于 2002-04-03 16:32:42 得分 0
更正更正:::
我不是JJ或MM!!!!
請不要弄錯。Top
6 楼N_chow(Yukon)回复于 2002-04-03 16:33:15 得分 0
aler() ,你的什麼問題???Top
7 楼rwq_(笨笨@天外有天山外有山)回复于 2002-04-03 16:41:55 得分 20
delete information from
(select max(id)as id,count(id)as id_num from information group by name having id_num>=2)info
where information.id=info.idTop
8 楼leimin(黄山光明顶)回复于 2002-04-03 17:12:14 得分 0
同意 N_Chow(一劍飄香++)的意见。Top
9 楼Haiwer(海阔天空)回复于 2002-04-03 17:47:58 得分 0
本来在 SQL SERVER版没有这一问的,但是贴主说以下语句出错,看不出来错在哪里,你用的什么数据库?
delete Information
from Information a,
(
select max(id) as id,Name from Information
group by name having count(*)>1
) as b
where a.id<>b.id
and a.name=b.nameTop
10 楼Haiwer(海阔天空)回复于 2002-04-03 17:50:07 得分 0
呵呵,飘香JJ??!!Top
11 楼N_chow(Yukon)回复于 2002-04-03 17:51:29 得分 0
海兄,不知是不是該如此:
delete a ---改別名
from Information a,
(
select max(id) as id,Name from Information
group by name having count(*)>1
) as b
where a.id<>b.id
and a.name=b.nameTop
12 楼N_chow(Yukon)回复于 2002-04-03 17:53:21 得分 0
按鈕JJ的SQL好像也有類似問題。
delete t0 from information t0
where exists (select id
from information t1
where t1.id<t0.id and t1.name=t0.name)
Top
13 楼Haiwer(海阔天空)回复于 2002-04-03 17:57:36 得分 0
飘香兄,那么写在SQL SERVER没有问题的。Top
14 楼icevi(按钮工厂)回复于 2002-04-03 18:24:49 得分 0
N_Chow(一劍飄香++) 说的对,我写的确实的问题的。
收到,谢谢~~Top
15 楼zcflion(吃大白菜的鸟--菜鸟)回复于 2002-04-03 21:21:02 得分 0
各位大哥,大姐们,小弟不明白的是!!
你们写出的语句怎么知道要删除(是一张没有主键的表)哪一条,要保留哪一条呢》》??
Top
16 楼zcflion(吃大白菜的鸟--菜鸟)回复于 2002-04-03 21:21:30 得分 0
当然这里指的是两条完全相同的记录!!!Top
17 楼fredfei(飞飞)回复于 2002-04-03 23:09:20 得分 0
我怎么看着像是要把记录重复的全部删除?而不是删除掉重复的纪录部分而保留一条??Top
18 楼Haiwer(海阔天空)回复于 2002-04-04 08:25:28 得分 20
你不是说ID是主键吗,既然是主键,就不应该有两条完全相同的记录。
我的语句你说有错,用飘香兄改过的,以下语句查出Name有重复的记录,删除Name相同而ID不是最大的记录,也就是保留ID最大的一条记录,其他的删除。
delete a
from Information a,
(
select max(id) as id,Name from Information
group by name having count(*)>1
) as b
where a.id<>b.id
and a.name=b.name
Top




