删除数据库表(无主键)中重复的记录,sql语句怎么写?

删除数据库表(无主键)中重复的记录,sql语句怎么写? 示例如下:

如何变成:

这是我用的,你可以根据你的数据表改改
use XLERP
--1、查询重复数据
SELECT cInvCode, cAcc_Id,count(*)FROM Attribute GROUP BY cInvCode, cAcc_Id HAVING count(*) > 1
--2、选择重复值到临时表
SELECT cInvCode, cAcc_Id,bSale, bPurchase, bSelf, bComsume, bProducing, bService, bAccessary, bInvType, bPropertyCheck, bPlanInv, bProxyForeign, bATOModel, bCheckItem, bPTOModel, bMPS, bROP, bCutMantissa, bInvModel, iInvNCost, iTopSum, iLowSum, iSafeNum, fOutExcess, cInvABC, dSDate, dEDate, cCreatePerson, cModifyPerson, dModifyDate,col3=count(*) INTO holdkey FROM Attribute GROUP BY cInvCode, cAcc_Id,bSale, bPurchase, bSelf, bComsume, bProducing, bService, bAccessary, bInvType, bPropertyCheck, bPlanInv, bProxyForeign, bATOModel, bCheckItem, bPTOModel, bMPS, bROP, bCutMantissa, bInvModel, iInvNCost, iTopSum, iLowSum, iSafeNum, fOutExcess, cInvABC, dSDate, dEDate, cCreatePerson, cModifyPerson, dModifyDate HAVING count(*) > 1
--3、选择重复的行放入临时表中,以清除进程中的重复值
SELECT DISTINCT Attribute.* INTO holddups FROM Attribute, holdkey WHERE Attribute.cInvCode = holdkey.cInvCode AND Attribute.cAcc_Id = holdkey.cAcc_Id
--4、验证 holddups 中的各个键是否唯一
SELECT cInvCode, cAcc_Id, count(*) FROM holddups GROUP BY cInvCode, cAcc_Id
--5、从原始表中删除重复的行
DELETE Attribute FROM Attribute, holdkey WHERE Attribute.cInvCode = holdkey.cInvCode AND Attribute.cAcc_Id = holdkey.cAcc_Id
--6、将唯一行放回原始表中
INSERT Attribute SELECT * FROM holddups
--7、删除临时表
drop table holddups
drop table holdkey
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-03-18
1, CREATE TABLE new_table S_b (SELECT distinct * FROM old_table);
2, Delete old_table
3, Rename new_table

本回答被提问者采纳

SQL Server 删除所有重复行数据,只保留一行记录,没有主键
里面有一个distinct,就是消除重复行的,如果你是想看的时候,重复的只留一行,而不是删除里面的数据的话,那么就是写selectdistinctidfrompersons或者selectidfrompersonsgroupbyid如果你是想删除表里面的相同行,那么就是deletefr

SQL Server 删除所有重复行数据,只保留一行记录,没有主键
1、先将不重复的数据查询出来并放到临时表中:select distinct * into #temp from 数据库 2、删除数据库表中的内容。3、然后将临时表的内容插入数据库表中保存即可。

删除数据库中重复的数据,只保留一条这个sql 怎么写?
1.找出一份不重复的表,导入到临时表,把原先的表数据删除,在把临时表的数据导回去,这个适合没有ID字段的表,语句:找出唯一数据,把重复去掉并存入中转表:select distinct * into table(中转表名称) from tb(原表)删除原表数据:delete tb 把中转表数据导入原表:insert into tb select * from...

mysql去掉重复行
删除数据表中重复数据,可以使用以下SQL语句:mysql> CREATE TABLE tmp SELECT no, name, sex FROM student GROUP BY (no, sex);mysql> DROP TABLE student;mysql> ALTER TABLE tmp RENAME TO student;也可以在数据表中添加INDEX(索引)和 PRIMAY KEY(主键)来删除表中的重复记录,方法如下:mysql...

sql查询去掉重复记录
1、打开要去掉重复数据的数据库,这里新建一张含有重复数据的user表做示例,如下图所示:2、输入“select * from user where name in (select name from user group by name having count(name) > 1) ”sql语句,点击运行可以看到查询出了数据库中user表的重复数据。3、通过“delete from user ...

sql中如何删除一个表中重复的记录?
sql中删除一个表中的重复记录可以采用如下步骤:1、把a_dist表的记录用distinct去重,结果放到临时表中。select distinct * into #temp from a_dist;2、把a_dist表的记录全部删除。delete from a_dist;3、把临时表中的数据信息导进到a_dist表中,并删除临时表。insert into a_dist select *...

在Oracle中如何用一条sql语句删除重复的数据(留一条数据)
oracle没接触过,我用的是mysql 参考一下 sql语法都是相通的 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录 delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)and rowid not in (...

SQL表内除了主键其他数据重复的如何删除只保留一条
delete from table where exists (select 1 from table where tr_date=table.tr_date and tr_num=table.tr_num and tr_id=table.tr_id and tr_note=table.tr_note group by tr_date,tr_num,tr_id,tr_note having count(*)>1)and id not in (select max(id) from table group by tr...

Sql Server表里面有2行数据完全一样,如何删除
Sql Server里面如果没有设定主键而删除重复数据很麻烦:一:保留重复记录中的一条记录,其他全部删除。--1:建立临时表,把不重复的数据转存 select distinct * into #Tmp from 表名;--2:删除原表数据 truncate table 表名;--3:将数据导回 insert into 表名 select * from #Tmp;--4:删除...

sql 语句去掉复重复的记录
中有重复记录(col1,col2为主键),如何删除 1、有少数重复记录(在col1,col2上有索引比较好)delete t where (col1,col2)in (select col1,col2 from t group by col1,col2 having count(*)> 1)and rowid not in (select min(rowid)from t group by col1,col2 having count(*)> 1)2...

相似回答