求删除重复记录的sql 语句,保留细ID的那条记录
如题,急
------解决方案--------------------delete T where ID not in (select min(a.id) from T a where a.X=T.X)
X是重复记录的字段
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)
最新版本:20070212
http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------用Group By把重复项目找出来,然后对每组重复的作如下处理:
1.用ID以外的数据将重复数据SELECT出来,ORDER BY ID,然后取TOP 1,这就得到最小的ID。
2.用DELETE进行删除,条件为ID以外的所有字段,以及ID大于上面选出的最小ID。
------解决方案--------------------Having count(*) > 1
------解决方案--------------------这类东西,首先要知道你有没有主键。没有主键时的做法用道有主键的表上,就是惊人地差的写法。有主键的写法用到没有主键的表上,显然,驴唇唇不对马嘴。
你有义务先把结构设计说清楚,然后再问。
------解决方案----------------------建立測試環境
--假設ID為主鍵,A,B即為你要判斷的字段
Create Table TEST
(ID Int Primary Key,
A Int,
B Int,
C Int)
--插入數據
Insert TEST Select 1, 2, 3, 5
Union All Select 2, 2, 3, 5
Union All Select 3, 3, 3, 6
Union All Select 4, 3, 7, 1
Union All Select 5, 5, 6, 2
Union All Select 6, 3, 3, 3
Union All Select 7, 3, 3, 5
GO
--測試
Select * From TEST
--刪除重復
Delete A From TEST A
Where Exists (Select ID From TEST Where ID < A.ID And A = A.A And B = A.B)
Select * From TEST
GO
--刪除測試環境
Drop Table TEST
--結果
/*
--刪除前結果
1 2 3 5
2 2 3 5
3 3 3 6
4 3 7 1
5 5 6 2
6 3 3 3
7 3 3 5
--刪除後結果
ID A B C
1 2 3 5
3 3 3 6
4 3 7 1
5 5 6 2
*/
------解决方案--------------------select id,jiancailei,xxjiancaiming,datatime from jiancai where id in (select max(id) as id from jiancai group by jiancailei) order by datatime desc
------解决方案--------------------having 查询最简单