SQL语句怎样查询并删除单个字段下的所有重复值, 重复的记录只保留一个

具体程序如下:
Set Cnn2 = Server.CreateObject("ADODB.Connection")
Cnn2.Open "PROVIDER=Microsoft.jet.OLEDB.4.0;Data Source=" & server.MapPath("./admin/db3.mdb")
Set rsTest2 = Server.CreateObject("ADODB.Recordset")
StrSQL2 = "Select * From quchiHH1 where quchiHH1.quchi like'%"& ZGb &"%'and'"& ZGb &"'<>'"&""& "'"
rsTest2.Open StrSQL2, Cnn2
For Iy = 0 To rsTest2.Fields.Count
if not(rsTest2.Fields(Iy).Value = "") then
set rsta2=conn3.Execute("insert into NCWH values ('"&rsTest2(Iy)&"')")
end if
Next
'以上代码是把一条记录里面的各字段值循环插入到新表NCWH里面的单个字段NCH下,用这样的方法再次向该表循环插入数据的时候,表NCWH就难免产生重复的值,
请高手帮忙编写一下查询并删除重复值的程序,重复的值只保留其中一个。另外请问有什么办法再次插入记录的时候过虑掉上一次已经插入过的值。本人用的是ASP+Access数据库
积分没有了,只剩下10分奉上表达心意,谢谢帮忙了

需要一个主键 id
如果是要删除是姓名重复的话,试试以下代码
delete ta where id not in
( select max(id) from group by nch )

如果要显示不重复项的数据
select * from ta where id in
( select max(id) from group by 姓名 )

如果 nch 这个地段,你需要不重复 , 事实上就可以把这一列作为主键

另外,你在添加信息的时候,做下判断,如果该列中已有,就不执行添加的代码。
并做提示信息。
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-10-30
这是我这边的范例,供参考:
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
第2个回答  2015-09-14
写个事务,就行了
第3个回答  2012-10-13
受教了,我也正好遇到这个问题
相似回答