抱抱熊和babycare腰凳:关于sql server 2000中的select语句问题,请高手指点!!

来源:百度文库 编辑:高校问答 时间:2024/04/28 07:47:48
假设我有一个简单的表,只包含两个列属性:id(主属性、标识、递增量为1)、name。
现在我来描述一下问题:如果name列有很多的重复值(不要问为什么,这是我的原因),那么我想把他们select出来,然后再把id值最大的留下(当然也要保留原来不重复的值),再删除掉其余的重复纪录。
那么这条(组)语句该怎么写?
求高手赐教,小弟愿把所有分数奉上。

select id,name from mytable where id in (select max(id) from mytable group by name);
delete from mytable where id not in (select max(id) from mytable group by name);

select id,name from mytable where id=(select max(id) from mytable)

delete mytable where id<>(select max(id) from mytable)

上面的两位都不对,首先分析一下思路!
1。检索有重复的name值:也就是说按name列分组后记数>1
语句: SELECT name FROM mytable GROUP BY name HAVING COUNT(id)>1;
这样SELECT出的name值是有重复的。

2。保留id最大的name重复值 和 不重复的name值。
换句话说也就是筛除在重复的name值中id<Max(id)的记录。
(要考虑到一个问题筛除数据是无法引用本表的子查询);
语句: (三步)
a。创建一个临时表:(用来保存要筛除的id号)
CREATE TEMPORARY TABLE temptable(id INT);

b。将要筛除的id号加入临时表中: (这个临时表中就是重复的< Max(id)的id号)
INSERT INTO temptable SELECT id FROM mytable WHERE name IN (SELECT name FROM mytable GROUP BY name HAVING COUNT(id)>1) AND id NOT IN(SELECT MAX(id) FROM mytable GROUP BY name);

c。在mytable中筛除这些id号:
DELETE FROM mytable WHERE id IN (SELECT id FROM temptable);

注释:我用的是mysql数据库,上面的四段代码都能运行也成功了。
如果在sql server2000中有问题发消息给我.