NOT IN速度当然很慢,因为这样会存在两个全表检索的情况,使用NOT EXISTS会快很多。 delete from t_b wher

[复制链接]
查看11 | 回复1 | 2011-4-29 10:58:12 | 显示全部楼层 |阅读模式
啊对不起,习惯上说成是A表了,这个数据库文件只有一个表,CIDZ表,
CIDZ表:
ID
地址
地区
1
厦门
华东
2
泉州
华东
3
厦门
华东
4
深圳
华南
5
深圳
华南
6
厦门
华东
delete from cidz where id NOT in (select max(id) from cidz group by 地址)
我的原意只是删除这个CIDZ表的重重复记录,但保留重复地址里面ID最大的一条记录

回复

使用道具 举报

千问 | 2011-4-29 10:58:12 | 显示全部楼层
呵呵,对啊,我觉得你的愿意应该也不是只保留最大的一行记录。这么写:DELETE FROM CIDZ WHERE EXISTS (SELECT 1 FROM CIDZ A WHERE A.ID > CIDZ.ID AND A.地址 = CIDZ.地址)你运行一下试试。因为NOT IN是一个检索,要先运行IN里面的语句,这样相当于多了一个全表的检索操作,先把范围选出来,所以当你的表数据非常大的时候,速度会非常慢。可是EXISTS语句就不同了,这个语句是一个返回TRUE或者FALSE的查询,如果返回TRUE,那么就i是符合条件的。你看一下那个语句,可以这么解释:删除表CIDZ中的数据,什么样的数据呢?是在这个表中存在ID比他大,而地址
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行