前一陣做了個會員系統(tǒng),又寫了個程序把以往的會員數(shù)據(jù)導(dǎo)入到SQL數(shù)據(jù)庫中.因為某些原因?qū)Я撕脦妆?造成了某些重復(fù)的記錄存在.前兩天使用人員才發(fā)現(xiàn)問題,于是想辦法解決.
搜啊搜,搜到了使用SQL句子刪除重復(fù)記錄的方法.又一次體會到了SQL的強大(其實是我的SQL水平太菜了而已).寫下來,加強記憶.
會員數(shù)據(jù)需要用到的是下面三個字段:ID(自增),MemberName,MemberAddress.只要會員姓名與會員地址相同就認為是重復(fù)記錄,重復(fù)記錄在刪除時只保留ID最大的那個.SQL如下:
delete MemberInfo where ID not in (
select max(ID) from MemberInfo group by MemberName, MemberAddress)
not in的效率可能會低些,但因為是直接操作數(shù)據(jù)庫,所以這并不重要.這個句子還是非常的簡單有效的.
在真正的刪除操作前,通常會先了解一下重復(fù)記錄的情況.可以使用下面的句子:
SELECT COUNT(MemberName) AS TheCount, MemberName, MemberAddress
FROM MemberInfo
GROUP BY MemberName, MemberAddress
HAVING (COUNT(*) > 1)
因為工作中用的SQL太簡單,以至于group by及having的用法都不了解,真是慚愧.
P.S. 所有的內(nèi)容都來自于網(wǎng)絡(luò),沒有什么獨創(chuàng)的東西.發(fā)出來只是為了加強一下自己的記憶.
搜啊搜,搜到了使用SQL句子刪除重復(fù)記錄的方法.又一次體會到了SQL的強大(其實是我的SQL水平太菜了而已).寫下來,加強記憶.
會員數(shù)據(jù)需要用到的是下面三個字段:ID(自增),MemberName,MemberAddress.只要會員姓名與會員地址相同就認為是重復(fù)記錄,重復(fù)記錄在刪除時只保留ID最大的那個.SQL如下:


在真正的刪除操作前,通常會先了解一下重復(fù)記錄的情況.可以使用下面的句子:




P.S. 所有的內(nèi)容都來自于網(wǎng)絡(luò),沒有什么獨創(chuàng)的東西.發(fā)出來只是為了加強一下自己的記憶.