處理表重複記錄(查詢和刪除)
宣告:下面的所有SQL語句都來自CSDN的帖子處理表重複記錄(查詢和刪除)裡,然後自己在整理出來的
<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
--> 1 --處理表重複記錄(查詢和刪除)
2 /******************************************************************************************************************************************************
3 1、Num、Name相同的重複值記錄,沒有大小關係只保留一條
4 2、Name相同,ID有大小關係時,保留大或小其中一個記錄
5 ******************************************************************************************************************************************************/
6
7 --1、用於查詢重複處理記錄(如果列沒有大小關係時2000用生成自增列和臨時表處理,SQL2005用row_number函式處理)
8
9 --> --> (Roy)生成測試資料
10
11 if not object_id('Tempdb..#T') is null
12 drop table #T
13 Go
14 Create table #T([ID] int,[Name] nvarchar(1),[Memo] nvarchar(2))
15 Insert #T
16 select 1,N'A',N'A1' union all
17 select 2,N'A',N'A2' union all
18 select 3,N'A',N'A3' union all
19 select 4,N'B',N'B1' union all
20 select 5,N'B',N'B2'
21 Go
22
23
24 --I、Name相同ID最小的記錄(推薦用1,2,3),方法3在SQl05時,效率高於1、2
25 --方法1:
26 Select * from #T a where not exists(select 1 from #T where Name=a.Name and ID<a.ID)
27
28 --方法2:
29 select a.* from #T a join (select min(ID)ID,Name from #T group by Name) b on a.Name=b.Name and a.ID=b.ID
30
31 --方法3:
32 select * from #T a where ID=(select max(ID) from #T where Name=a.Name)
33
34 --方法4(注:ID為唯一時可用):
35 select * from #T a where ID in(select min(ID) from #T group by Name)
36
37 --SQL2005:
38
39 --方法5:
40 select ID,Name,Memo from (select *,min(ID)over(partition by Name) as MinID from #T a)T where ID=MinID
41
42 --方法6:
43
44 select ID,Name,Memo from (select *,row_number()over(partition by Name order by ID) as MinID from #T a)T where MinID=1
45
46 --生成結果:
47 /*
48 ID Name Memo
49 ----------- ---- ----
50 1 A A1
51 4 B B1
52
53 (2 行受影響)
54 */
55
56
57 --II、Name相同ID最大的記錄,與min相反:
58 --以上面的min相反,只要將min改為max,小號改為大於號即可
59
60 --2、刪除重複記錄有大小關係時,保留大或小其中一個記錄
61
62
63 --I、Name相同ID最小的記錄(推薦用1,2,3),保留最小一條
64 --在上面的基礎上,將select 改為delete即可,
65 --例如方法1 改 為;
66 delete a from #T a where exists(select 1 from #T where Name=a.Name and ID<a.ID)
67
68
69 --3、刪除重複記錄沒有大小關係時,處理重複值
70 方法1:
71 if object_id('Tempdb..#') is not null
72 drop table #
73 Select distinct * into # from #T--排除重複記錄結果集生成臨時表#
74
75 truncate table #T--清空表
通過上面這些語句,在日常中即可以很容易處理表重複的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-616843/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 查詢刪除表中重複記錄
- SQL SERVER應用例項——處理表重複記錄(查詢和刪除)_整理貼4 (轉)SQLServer
- Oracle查詢重複資料與刪除重複記錄Oracle
- Oracle查詢重複資料與刪除重複記錄方法Oracle
- mysql表刪除重複記錄方法MySql
- 轉載:Oracle中查詢和刪除重複記錄方法簡介Oracle
- Mysql語句查詢指定重複記錄和刪除重複記錄僅保留一條【親測可以】MySql
- Oracle 查詢並刪除重複記錄的SQL語句OracleSQL
- Oracle如何刪除表中重複記錄Oracle
- mysql查詢表裡的重複資料方法和刪除重複資料MySql
- 【探索】兩種查詢和刪除重複記錄的方法及其效能比較
- 刪除Oracle重複記錄Oracle
- oracle刪除重複記錄Oracle
- oracle 查詢及刪除表中重複資料Oracle
- mysql 查詢及 刪除表中重複資料MySql
- 高效快速刪除Oracle表中重複記錄Oracle
- SQL重複記錄查詢SQL
- Oracle 刪除表中重複記錄的DELETE SQLOracledeleteSQL
- DB2 刪除重複記錄DB2
- 海量資料處理_刪除重複行
- oracle重複資料的查詢及刪除Oracle
- Oracle如何刪除表中重複記錄保留第一條Oracle
- MySQL刪除表重複記錄的三種方法舉例MySql
- 記錄一下避免排序和刪除重複行排序
- Oracle使用over()partition by刪除重複記錄Oracle
- db2刪除重複的記錄DB2
- oracle-快速刪除重複的記錄Oracle
- sql刪除重複記錄只保留一條SQL
- MYSQL中刪除重複記錄的方法薦MySql
- Oracle刪重複記錄Oracle
- MySQL刪除重複記錄並保留第一條MySql
- SQL Server 批量刪除重複記錄(批量、快速、安全)SQLServer
- 在SQL Server中快速刪除重複記錄(轉)SQLServer
- 刪除表裡重複資料
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle
- db2中刪除重複記錄的問題DB2
- 查詢、刪除多個欄位相同的記錄
- 利用logminer查詢被刪除記錄的資訊