这个SQL怎么写

[复制链接]
查看11 | 回复6 | 2011-11-1 16:25:51 | 显示全部楼层 |阅读模式
比如TABLE中数据如下
ID NAME
1 a
1 a
2 b
3 c
都知道用select distinct * from TABLE可以选出不重复的行
此问题中即
1 a
2 b
3 c
现在我只想把重复的行选出来(即 1 a)
要怎么写这个SQL
然后 如果想删掉重复的行
又要怎么写呢
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
选出重复的行:
select * from t group by id, col2 having count(*)>1
删掉重复的行,
alter table t add col3 int identity not null;
delete from t where col3 not in (select max(col3) from t group by id, col2);
alter table t drop col3;(前提select into/bulkcopy on数据库上的options)
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
不错,里面的 max(col3) 用min(col3)替代,也是道理差不多的。
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
谢谢楼上两位
如果我的表里有几十个字段呢
是否必须order by所有字段都列上
还有其他方法么
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
不用order。 好好看看书上关于group by 的用法的。 2楼的办法可行。
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
原帖由 andkylee 于 2010-4-7 09:16 发表
不用order。 好好看看书上关于group by 的用法的。 2楼的办法可行。

不好意思 我打错了
2楼的方法我明白
我的意思是如果一个表里有几十个字段
那么我想找出重复的行
只能select distinct * from table group by [几十个字段都列上?] having count(*)>1
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
是的
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行