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

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

如何变成:
展开
 我来答
lzf3211
2015-03-18 · TA获得超过238个赞
知道小有建树答主
回答量:803
采纳率:0%
帮助的人:361万
展开全部
这是我用的,你可以根据你的数据表改改
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
qiaole123
2015-03-18 · TA获得超过3413个赞
知道大有可为答主
回答量:1408
采纳率:66%
帮助的人:968万
展开全部
1, CREATE TABLE new_table S_b (SELECT distinct * FROM old_table);
2, Delete old_table
3, Rename new_table
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式