直接按顺序执行sql即可select distinct * into zz_tmp from Ttruncate table Tinsert into T select * from zz_tmp
给你一个例子! ---------------------- 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
"select * from T group by 物资代码 having count(*)>1"提示不能使用“*”,上面的语句我要查询所有字段,该怎么修改?
2楼的方法最通用。 3楼性能更好,不过只适合 Oracle 数据库。
我现在可以查询出来重复记录了,语句如下: "select * from T " where 物资代码 in (select 物资代码 from T group by 物资代码 having count(*)>1)"
select distinct * from T where 物资代码 in (select 物资代码 from T group by 物资代码 having count(*)>1)
我有与楼主同样的经历,删除数据前一定要反复确认。 1 在T 中插入一条名为 id 的自增序号字段,用以确定唯一性, 2 然后 插入 3 条或以上 物资代码 相同的测试数据,厂家地址可以不同, 物资代码 要特殊些最好是99999999 这样T表中不曾有过的。 3 运行下面的语句, SELECT * FROM T WHERE (id NOT IN (SELECT MIN(id) AS mid FROM T GROUP BY 物资代码)) 如果插入的 三条测试数据显示其中两条,说明语句没问题4 把上述语句中 select * 改为 delete 即可,运行 delete FROM T WHERE (id NOT IN (SELECT MIN(id) AS mid FROM T GROUP BY 物资代码))当 物资代码 相同 但其他字段有不同时: 其中 MIN(id) 可以保留第一次录入的数据, 改为 Max(id) 可以保留最后一次录入的数据
create table aa ( id1 int , id2 int )insert into aa values(2,2) insert into aa values(2,2) insert into aa values(2,2)select id=identity(int,1,1),* into #t1 from aa drop table aa select distinct id1,id2 into aa from #t1
先建一个自增列ID,然后表自连接
删除 物资代码相等且ID不相等 的行还用过一种方法是用缓存表
用dintinct 检索后反插
----------------------
删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3楼性能更好,不过只适合 Oracle 数据库。
"select * from T " where 物资代码 in (select 物资代码 from T group by 物资代码 having count(*)>1)"
select distinct *
from T
where 物资代码 in (select 物资代码 from T group by 物资代码 having count(*)>1)
1 在T 中插入一条名为 id 的自增序号字段,用以确定唯一性,
2 然后 插入 3 条或以上 物资代码 相同的测试数据,厂家地址可以不同,
物资代码 要特殊些最好是99999999 这样T表中不曾有过的。
3 运行下面的语句,
SELECT * FROM T WHERE (id NOT IN (SELECT MIN(id) AS mid FROM T GROUP BY 物资代码))
如果插入的 三条测试数据显示其中两条,说明语句没问题4 把上述语句中 select * 改为 delete 即可,运行
delete FROM T WHERE (id NOT IN (SELECT MIN(id) AS mid FROM T GROUP BY 物资代码))当 物资代码 相同 但其他字段有不同时:
其中 MIN(id) 可以保留第一次录入的数据,
改为 Max(id) 可以保留最后一次录入的数据
create table aa
(
id1 int ,
id2 int
)insert into aa values(2,2)
insert into aa values(2,2)
insert into aa values(2,2)select id=identity(int,1,1),* into #t1 from aa
drop table aa
select distinct id1,id2 into aa from #t1